请检查下面的代码。如果我从最后一行删除$ format到$ sheet_write-> write($ row,$ col,$ cell-> value),那么它将正常工作。
我声明要在excel_2电子表格中添加格式,该格式将由“ Excel :: Writer :: XLSX;”编写。包。我正在从另一个阅读器解析器“ use Spreadsheet :: ParseXLSX”处理单元格格式($ format = $ cell-> get_format();)。任何帮助,将不胜感激。我期望这两种不同的方法之间会有一些不匹配。
#!/home/utils/perl-5.24/5.24.2-058/bin/perl -w
use strict;
use warnings;
use Excel::Writer::XLSX;
use Spreadsheet::ParseXLSX;
my $parser = Spreadsheet::ParseXLSX->new();
my $workbook = $parser->parse('abc.xlsx');
my $excel_2 = Excel::Writer::XLSX -> new ('abc_copied.xlsx');
my $format = $excel_2->add_format();
if ( !defined $workbook ) {
die $parser->error(), ".\n";
}
for my $worksheet ( $workbook->worksheets() ) {
my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
printf("Sheet: %s\n", $worksheet->{Name});
my $sheet_write = $excel_2->add_worksheet($worksheet->{Name});
for my $row ( $row_min .. $row_max ) {
for my $col ( $col_min .. $col_max ) {
my $cell = $worksheet->get_cell( $row, $col );
next unless $cell;
print "Row, Col = ($row, $col)\n";
#print "Value = ", $cell->value(), "\n";
#print "Unformatted = ", $cell->unformatted(), "\n";
#print "\n";
$format= $cell->get_format();
$sheet_write->write($row, $col,$cell -> value,$format);
}
}
}
Spreadsheet :: ParseXLSX的cell-> get_format产生的对象与Excel :: Writer :: XLSX期望的write
方法中的格式对象不同。即使它们都处理电子表格,它们都是不同的模块,并且极不可能以这种方式共享一个类。
Excel :: Writer :: XLSX格式对象的属性有据可查:
https://metacpan.org/pod/Excel::Writer::XLSX#CELL-FORMATTING
我看到有一个克隆格式模块:
https://metacpan.org/pod/Excel::CloneXLSX::Format
没有亲身经历,但是看起来很有希望...否则,您可能必须转储Parse模块的内容,找出对您最重要的内容,然后自己进行翻译。但是请认真尝试该模块。
或者,如果它是在Windows计算机上,则如果将您绑定到Perl,Win32 :: OLE可能会更好地为您处理此类任务(不用说,如果您的唯一重点是Excel,那将不是我的首选电子表格操作)。