【发布时间】:2017-09-14 13:39:39
【问题描述】:
我正在尝试读取现有的 Excel 电子表格并将其写入具有所有相同格式选项的新 Excel 文档。
我可以读取单元格内容并将其写入新的 Excel 工作表,但无法获取单元格的背景颜色。
如果我使用 $cell->get_format->{Fill}[2] 方法,如果单元格有背景颜色,它会给我像 64 或 65 这样的数字。
如何获取单元格的实际颜色并将相同的背景颜色应用于新 Excel 工作表中的单元格?
我正在做所有这些事情,因为在将数据附加到现有 Excel 工作表后,Spreadsheet::ParseExcel 模块中没有可用的方法来设置单元格的背景颜色。
这是我的代码
use Spreadsheet::WriteExcel;
use Spreadsheet::ParseExcel;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook_parse = $parser->Parse( 'Report.xls' );
my $worksheet_parse = $workbook_parse->Worksheet( "Health_Report" );
my ( $col_min, $col_max ) = $worksheet_parse->col_range();
my ( $row_min, $row_max ) = $worksheet_parse->row_range();
my $workbook = Spreadsheet::WriteExcel->new( "Report_new.xls" );
my $worksheet = $workbook->addworksheet( "Health_Report" );
my $bkgd_color = $workbook->addformat();
for my $col ( $col_min .. $col_max ) {
for my $row ( $row_min .. $row_max ) {
# Return the cell object at $row and $col
my $cell = $worksheet_parse->get_cell( $row, $col );
next unless $cell;
my $value = $cell->value();
my $format = $cell->get_format();
my $backgroundcolor = $format->{Fill}->[2];
print "Row, Col = ($row, $col) ";
print "Value = $value\n";
print "Format = $backgroundcolor\n";
$bkgd_color->set_bg_color( $backgroundcolor );
### Here trying to rewrite into Excel and apply the
### same background color which the cell had previously
$worksheet->write( $row, $col, $value, $bkgd_color );
}
}
打印语句的部分输出:
Format = 65
Row, Col = (25, 4) Value = -115966
Format = 65
Row, Col = (10, 5) Value = 20170417
Format = 65
Row, Col = (11, 5) Value = 0
Format = 64
Row, Col = (16, 5) Value = 0
Format = 64
【问题讨论】:
-
请尽量保持代码整洁,尤其是在寻求帮助之前。如果程序的缩进和布局正确,它将极大地帮助遵循程序。这次我给你做了,希望你能看到改进?也请always
use strict和use warnings 'all'在您编写的每个 Perl 程序的顶部。它是您防止基本错误和错误的第一道防线,即使在最简单的程序中也不应省略。
标签: excel perl scripting report