2012-06-21 133 views
5

我试图在我的Excel表格中添加条件格式。 不幸的是Spreadsheet :: WriteExcel页面上的例子太简单了,我不知道该怎么做。电子表格:: 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)"); 

但withouts任何影响。

回答

3

,坏消息是我认为它几乎不能完成的电子表格:: WriteExcel。

好消息是,它可以很容易地使用Excel ::作家:: XLSX完成。这恰好是Spreadsheet :: WriteExcel的一种后裔。请阅读文章:Spreadsheet::WriteExcel is dead. Long live Excel::Writer::XLSX

下面的代码不正是你想要的格式(仅基于单元格A1,而不是RC10,这是可以改变的,当然):

#!/usr/bin/perl -w 
use strict; 
use Excel::Writer::XLSX; 

my @matrix = (
    ['xxxx', '<-- Change the value in cell A1 to change the colour of row 4'], 
    [qw(Redyard Kipling)], 
    [qw(If--)], 
    [qw(If you can keep your head when all about you)], 
    [qw(Are losing theirs and blaming it on you;)], 
); 

writeSpreadsheet('conditional.formatting.xlsx', \@matrix); 

sub writeSpreadsheet { 
    my ($outFile, $matrix) = @_; 
    my $MIN_COL_WIDTH = 5; 
    my $MAX_COL_WIDTH = 35; 
    my $workbook = Excel::Writer::XLSX->new($outFile); 
    my $worksheet = $workbook->add_worksheet(); 
    my $redFormat = $workbook->add_format(font => 'Arial', color => 'red'); 
    my $greenFormat = $workbook->add_format(font => 'Arial', color => 'green', bold => 1); 
    $worksheet->set_row(0, undef, 
     $workbook->add_format(font => 'Arial', align => 'center', bold => 1)); 
    $worksheet->conditional_formatting('A4:Z4', 
     { 
      type => 'formula', 
      criteria => '=$A$1 = "xxxx"', 
      format => $greenFormat 
     } 
    ); 
    $worksheet->conditional_formatting('A4:Z4', 
     { 
      type => 'formula', 
      criteria => '=$A$1 = "yyyyyy"', 
      format => $redFormat 
     } 
    ); 
    foreach my $row (0 .. $#$matrix) { 
     foreach my $col (0 .. $#{$matrix->[$row]}) { 
      $worksheet->write($row, $col, $matrix->[$row][$col] || ''); 
     } 
    } 
} 
1

安东,是正确的。条件格式在Spreadsheet::WriteExcel中不受支持。

然而,较新的,API兼容的替代品,Excel::Writer::XLSX提供了一套丰富的条件格式功能。

查看已更新的Conditional Formatting docs in Excel :: Writer :: XLSX和example

+0

WriteExcel的API与XLSX完全兼容? – patseb

+0

是的。参见[Excel :: Writer :: XLSX和Spreadsheet :: WriteExcel](http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX/lib/Excel/Writer/XLSX.pm#Excel::Writer :: XLSX_and_Spreadsheet :: WriteExcel)部分的文档。 – jmcnamara

1

conditional_formatting的行为很奇怪。 我有类似的东西:

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是一样的,为什么它不起作用?

+0

这似乎是我以前不能使用$格式,它必须是“新鲜”的新格式......它没有意义。 – patseb

0

关于第二个问题:

您可能会遇到其中的格式越来越垃圾收集你使用它们由于范围的问题之前的问题。

如果它是一个范围问题,尝试添加$workbook->close()到你的程序的结束,看看是否能解决它。

不然的话,我们就需要一个更完整的示例程序进行调试。

相关问题