如何使用 Excel::Writer::XLSX 设置工作簿范围的默认格式?
How do I set a workbook-wide default format with Excel::Writer::XLSX?
是否可以使用 Excel::Writer::XLSX 更改或声明默认字体?
我可以在每次创建或添加图表和单元格时对其进行设置。不过我觉得应该有更简单的方法。
也许吧。
免责声明: Excel::Writer::XLSX 的作者解释说这不是一个好主意并且不能保证工作 and 。
您可以在创建 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 );
这在文档中没有描述,但 reading the code 解释了它。
即使您稍后添加更多格式,它也能正常工作。您不需要保留该初始调用的 Format 对象。它将在整个工作簿中使用(可能也在不同的工作表上,但我没有测试)。
我建议在代码注释中解释你在做什么,因为它真的不是很明显。
经过一些额外的研究,我发现它在第 89 页底部的第 4.6.2 章 the PDF document OpenOffice.org's Documentation of the Microsoft Excel File Format 中有解释(强调我的)。
The default cell format
is always present in an Excel file, described by the XF record with the fixed index 15 (0-based). By default, it uses the
worksheet/workbook default cell style, described by the very first XF record (index 0).
所以现在我们也知道为什么是 xf_index => 0
.
带有一般建议的旧答案:
通常不支持。您需要使用格式。 The docs say 11 号的 Calibri 有默认格式。
The default format is Calibri 11 with all other properties off.
您需要为格式、字体系列、字体大小等的特定组合创建一个格式对象,然后您可以在整个文档的每个单元格或图表中重复使用它。如果其中一个选项在特定单元格中不同,您需要为此创建一个额外的格式对象。
my $default_format = $workbook->add_format( font => 'Comic Sans' );
# ...
$worksheet->write( 'A1', 'Cell A1', $default_format );
# later ...
$worksheet->write( 'Z3', 'Cell Z3', $default_format );
如果您需要很多不同的格式,但总是想使用相同的字体,那么将字体字符串设置为格式散列并使用它可能会很有用。
my %default_formatting = ( font => 'Comic Sans' );
my $bold_format = $workbook->add_format( %default_formatting, bold => 1 );
甚至可以制作一个子程序来帮助创建格式对象并且已经知道默认字体。
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 );
这也允许 一次性使用 格式,如下所示:
$worksheet->write( 'D1', 'Weird stuff', create_format(
$workbook,
bold => 1,
strikeout => 1,
shadow => 1,
bg_color => 'pink',
));
是否可以使用 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 );
这在文档中没有描述,但 reading the code 解释了它。
即使您稍后添加更多格式,它也能正常工作。您不需要保留该初始调用的 Format 对象。它将在整个工作簿中使用(可能也在不同的工作表上,但我没有测试)。
我建议在代码注释中解释你在做什么,因为它真的不是很明显。
经过一些额外的研究,我发现它在第 89 页底部的第 4.6.2 章 the PDF document OpenOffice.org's Documentation of the Microsoft Excel File Format 中有解释(强调我的)。
The default cell format is always present in an Excel file, described by the XF record with the fixed index 15 (0-based). By default, it uses the worksheet/workbook default cell style, described by the very first XF record (index 0).
所以现在我们也知道为什么是 xf_index => 0
.
带有一般建议的旧答案:
通常不支持。您需要使用格式。 The docs say 11 号的 Calibri 有默认格式。
The default format is Calibri 11 with all other properties off.
您需要为格式、字体系列、字体大小等的特定组合创建一个格式对象,然后您可以在整个文档的每个单元格或图表中重复使用它。如果其中一个选项在特定单元格中不同,您需要为此创建一个额外的格式对象。
my $default_format = $workbook->add_format( font => 'Comic Sans' );
# ...
$worksheet->write( 'A1', 'Cell A1', $default_format );
# later ...
$worksheet->write( 'Z3', 'Cell Z3', $default_format );
如果您需要很多不同的格式,但总是想使用相同的字体,那么将字体字符串设置为格式散列并使用它可能会很有用。
my %default_formatting = ( font => 'Comic Sans' );
my $bold_format = $workbook->add_format( %default_formatting, bold => 1 );
甚至可以制作一个子程序来帮助创建格式对象并且已经知道默认字体。
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 );
这也允许 一次性使用 格式,如下所示:
$worksheet->write( 'D1', 'Weird stuff', create_format(
$workbook,
bold => 1,
strikeout => 1,
shadow => 1,
bg_color => 'pink',
));