Perl 电子表格::基于其他单元格值的WriteExcel条件格式

Perl 电子表格::基于其他单元格值的WriteExcel条件格式,perl,excel,Perl,Excel,我正在尝试在excel工作表中添加条件格式。 不幸的是,电子表格::WriteExcel页面上的示例太简单了,我不知道怎么做 我想通过RC10单元格值更改行背景颜色。 在excel中,我将添加格式化公式 =IF(RC10="xxxx";1;0) 我曾尝试在电子表格::WriteExcel中执行类似操作: my $detail_rest_fmt = $excel->add_format(font => "Calibri", size => 11, valign => "

我正在尝试在excel工作表中添加条件格式。 不幸的是,电子表格::WriteExcel页面上的示例太简单了,我不知道怎么做

我想通过RC10单元格值更改行背景颜色。 在excel中,我将添加格式化公式

=IF(RC10="xxxx";1;0)
我曾尝试在电子表格::WriteExcel中执行类似操作:

my $detail_rest_fmt = $excel->add_format(font => "Calibri", size => 11, valign  => "vcenter", align => "right", border => 1);
$detail_rest_fmt->set_num_format("[Green]=IF(RC10=\"xxxx\";1;0);[Red]=IF(RC10=\"yyyyyy\";1;0)"); 

但是没有任何效果。

坏消息是,我认为用电子表格::WriteExcel很难做到这一点

好消息是,使用Excel::Writer::XLSX可以轻松完成这项工作。它恰好是Spreadsheet::WriteExcel的后代。请阅读文章:

以下代码完全符合您的格式要求(仅基于单元格A1而不是RC10,当然可以更改):

#/usr/bin/perl-w
严格使用;
使用Excel::Writer::XLSX;
我的@matrix=(

['xxxx','Anton,是正确的。中不支持条件格式

但是,较新的、与API兼容的替代品提供了一组丰富的条件格式功能


请参阅Excel::Writer::XLSX中的更新文档以及此文档。

条件格式的行为非常奇怪。 我得到了这样的东西:

my $yyy = $excel->add_format(font => "Calibri", size => 11, valign  => "vcenter", align => "right", border => 1, border_color => "black", bg_color => $green);

for my $section (@sections) {
   for my $sector (@sectors) {
       my $xxxx = $excel->add_format(font => "Calibri", size => 11, valign  => "vcenter", align => "right", border => 1, border_color => "black", bg_color => $green);
            $sheet->conditional_formatting("A1", 
            {
                type => "formula",
                criteria => '=J4="T1"',
                format => $yyy
            });
   }
}
当我使用$yyy时,它不起作用(在excel中,设置了填充图案而不是背景颜色) 当我使用$xxxx时,它工作正常。
$yyy和$xxxx是相同的,那么为什么它不起作用呢?

关于第二个问题:

您可能会遇到这样一个问题:由于范围问题,在使用格式之前,格式会被垃圾收集

如果是范围问题,请尝试在程序末尾添加一个
$workbook->close()
,看看它是否解决了问题


否则,我们需要一个更完整的示例程序来调试它。

WriteExcel的API与XLSX完全兼容?是的。请参阅文档的一节。似乎我以前不能使用$format,它必须是“新的”新格式……这没有意义。
my $yyy = $excel->add_format(font => "Calibri", size => 11, valign  => "vcenter", align => "right", border => 1, border_color => "black", bg_color => $green);

for my $section (@sections) {
   for my $sector (@sectors) {
       my $xxxx = $excel->add_format(font => "Calibri", size => 11, valign  => "vcenter", align => "right", border => 1, border_color => "black", bg_color => $green);
            $sheet->conditional_formatting("A1", 
            {
                type => "formula",
                criteria => '=J4="T1"',
                format => $yyy
            });
   }
}