如何使用Excel :: Writer :: XLSX设置工作簿范围的默认格式?

tso*_*omo 5 perl xlsx

是否可以使用Excel :: Writer :: XLSX更改或声明默认字体?我每次创建或添加图表和单元格时都可以设置它.但我认为应该有一个更简单的方法.

sim*_*que 3

或许。

免责声明: 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)

  • *是的,但它是隐藏的。您可以在创建 Format 对象时将属性 xf_index 设置为 0。* 不保证现在或将来的任何时候都有效。在 Excel 2007+ 中设置默认格式的唯一有效方法是更新 theme.xml 文件,但 Excel::Writer::XLSX 目前不支持该文件。 (2认同)