是否可以使用Excel :: Writer :: XLSX更改或声明默认字体?我每次创建或添加图表和单元格时都可以设置它.但我认为应该有一个更简单的方法.
或许。
免责声明: Excel::Writer::XLSX 的作者解释说这不是一个好主意,并且不保证可以在此处和此处工作。
您可以在创建 Format 对象时xf_index
设置该属性。0
这将将该格式设置为默认格式。
use Excel::Writer::XLSX;
my $workbook = Excel::Writer::XLSX->new( 'filename.xlsx' );
# set the default format
$workbook->add_format(xf_index => 0, font => 'Comic Sans MS' ); # I'm on Linux
my $worksheet = $workbook->add_worksheet();
$worksheet->write( 0, 0, 'Hi Excel!' ); # will be in Comic Sans
my $format = $workbook->add_format(font => 'Arial' );
$worksheet->write( 1, 1, 'In Arial!', $format );
Run Code Online (Sandbox Code Playgroud)
文档中没有描述这一点,但阅读代码会解释这一点。
即使您稍后添加更多格式,它也能正常工作。您不需要保留该初始调用的 Format 对象。它将在整个工作簿中使用(可能也在不同的工作表上使用,但我没有测试)。
我建议在代码注释中解释你在做什么,因为它确实不是很明显。
经过一些额外的研究,我发现它在PDF 文档OpenOffice.org's Documentation of the Microsoft Excel File Format中进行了解释,位于第 89 页底部的第 4.6.2 章(重点是我的)。
默认单元格格式始终存在于 Excel 文件中,由具有固定索引 15(从 0 开始)的 XF 记录描述。默认情况下,它使用工作表/工作簿默认单元格样式,由第一个 XF 记录(索引 0)描述。
所以现在我们也知道为什么会这样了xf_index => 0
。
旧答案和一般建议:
一般来说,这是不支持的。您需要使用格式。文档说Calibri 有一个默认格式,大小为 11。
默认格式为 Calibri 11,所有其他属性均关闭。
您需要为格式、字体系列、字体大小等的特定组合创建一个格式对象,然后您可以在整个文档的每个单元格或图表中重复使用该对象。如果某个选项在特定单元格中不同,则需要为此创建一个附加的 Format 对象。
my $default_format = $workbook->add_format( font => 'Comic Sans' );
# ...
$worksheet->write( 'A1', 'Cell A1', $default_format );
# later ...
$worksheet->write( 'Z3', 'Cell Z3', $default_format );
Run Code Online (Sandbox Code Playgroud)
如果您需要很多不同的格式,但总是想使用相同的字体,那么将字体字符串设置为格式散列并使用它可能会很有用。
my %default_formatting = ( font => 'Comic Sans' );
my $bold_format = $workbook->add_format( %default_formatting, bold => 1 );
Run Code Online (Sandbox Code Playgroud)
甚至可以制作一个子组件来帮助创建 Format 对象并且已经知道默认字体。
sub create_format {
my ($workbook, %formats) = @_;
return $workbook->add_format( font => 'Comic Sans', %formats );
}
# somewhere
my $bold_format = create_format( $workbook, bold => 1 );
$worksheet->write( 'A1', 'Cell A1', $bold_format );
Run Code Online (Sandbox Code Playgroud)
这也将允许像这样的一次性格式:
$worksheet->write( 'D1', 'Weird stuff', create_format(
$workbook,
bold => 1,
strikeout => 1,
shadow => 1,
bg_color => 'pink',
));
Run Code Online (Sandbox Code Playgroud)