La mala noticia es que creo que difícilmente se puede hacer con Spreadsheet :: WriteExcel.
La buena noticia es que se puede hacer fácilmente con Excel :: Writer :: XLSX. Lo que resulta ser un tipo de descendiente de Spreadsheet :: WriteExcel. Por favor leer el artículo: Spreadsheet::WriteExcel is dead. Long live Excel::Writer::XLSX
El código siguiente no exactamente el formato que desee (sólo sobre la base de la celda A1 en lugar de RC10, esto se puede cambiar, por supuesto):
#!/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] || '');
}
}
}
API de WriteExcel es compatible con XLSX? – patseb
Sí. Consulte [Excel :: Writer :: XLSX y Spreadsheet :: WriteExcel] (http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX/lib/Excel/Writer/XLSX.pm#Excel::Writer :: XLSX_and_Spreadsheet :: WriteExcel) sección de la documentación. – jmcnamara