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

Perl 如何使用Excel::Writer::XLSX设置工作簿范围的默认格式?,perl,xlsx,Perl,Xlsx,是否可以使用更改或声明默认字体? 我可以在每次创建或添加图表和单元格时设置它们。但是我认为应该有一个更简单的方法。也许。 免责声明:Excel::Writer::XLSX的作者解释说,这不是一个好主意,也不能保证工作正常 创建格式对象时,可以将属性xf_index设置为0。这会将该格式设置为默认格式 use Excel::Writer::XLSX; my $workbook = Excel::Writer::XLSX->new( 'filename.xlsx' ); # set th

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

也许。

免责声明:Excel::Writer::XLSX的作者解释说,这不是一个好主意,也不能保证工作正常

创建格式对象时,可以将属性
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 );
文档中未对此进行描述,但对此进行了解释

即使以后添加更多格式,它也可以工作。您不需要保留该初始调用的Format对象。它将在整个工作簿中使用(可能也在不同的工作表上,但我没有测试)

我建议在代码注释中解释您正在做的事情,因为这并不十分明显

经过一点额外的研究,我发现它在第89页底部的第4.6.2章(我的重点)中得到了解释

默认单元格格式 始终存在于Excel文件中,由固定索引为15(基于0)的XF记录描述默认情况下,它使用 工作表/工作簿默认单元格样式,由第一条XF记录(索引0)描述。

现在我们也知道为什么它是
xf\u index=>0


带有一般建议的旧答案:

一般来说,这是不受支持的。您需要使用格式。Calibri的默认格式大小为11

默认格式为Calibri 11,所有其他属性均处于禁用状态

您需要为格式、字体系列、字体大小等的特定组合创建一个format对象,然后可以在每个单元格或图表中的整个文档中重用该对象。如果某个特定单元格中的某个选项不同,则需要为该单元格创建一个附加的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 );
如果您需要很多不同的格式,但总是希望使用相同的字体,那么将字体字符串设置为格式哈希并使用它可能会很有用

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',
));

你用什么模块?我在CPAN上找不到一个名为“xlswriter”的。我正在使用它。我找到了一种方法并更新了答案。@simbabque谢谢你的回答。我猜到了。我唯一的问题是无法设置图表系列名称的字体。我读了很多遍,但似乎并没有为序列名设置字体的方法。可能并没有。你可以为此提出一个新问题,并适当地标记它。我们现在知道作者经常这样,所以他可能会回答。是的,但它是隐藏的。创建格式对象时,可以将属性xf_index设置为0。这不能保证在现在或将来的任何时候起作用。在Excel 2007+中设置默认格式的唯一有效方法是更新theme.xml文件,而Excel::Writer::XLSX目前不支持该文件。@jmcnamara感谢您的澄清。但这不也适用于我找到它的构造函数中的代码吗?构造函数将默认格式设置为与默认主题文件中的默认格式相匹配。你的变通方法可能在某些情况下有效,但不是全部。@jmcnamara我明白了。我甚至没有Excel可供测试。我试过Libre Office 5,但只试过一个案例。但它看起来好像奏效了。你认为我的答案的旧部分有效吗?请参阅我的编辑。我想现在很清楚,这样做可能不是个好主意。