使用 Spreadsheett::ParseXLSX 从 .xlsx 文件复制单元格格式以使用 EXCEL:WRITER::XLSX 写入另一个单元格?
Copy the cell format from .xlsx file using Spreadsheett::ParseXLSX to write another cell using EXCEL:WRITER::XLSX?
请检查下面的代码。如果我从最后一行删除 $format 到 $sheet_write->write($row, $col,$cell -> value) 然后它工作正常。
我声明要在 excel_2 电子表格中添加由 "Excel::Writer::XLSX;" 包编写的格式。我正在处理来自另一个 reader 解析器“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
方法中期望的格式对象不同。尽管它们都处理电子表格,但它们是不同的模块,并且不太可能以这种方式共享 class。
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 电子表格操作,则首选。
请检查下面的代码。如果我从最后一行删除 $format 到 $sheet_write->write($row, $col,$cell -> value) 然后它工作正常。
我声明要在 excel_2 电子表格中添加由 "Excel::Writer::XLSX;" 包编写的格式。我正在处理来自另一个 reader 解析器“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
方法中期望的格式对象不同。尽管它们都处理电子表格,但它们是不同的模块,并且不太可能以这种方式共享 class。
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 电子表格操作,则首选。