使用Spreadsheett :: ParseXLSX从.xlsx文件复制单元格格式,然后使用EXCEL:WRITER :: XLSX?写入另一个单元格。

问题描述 投票:0回答:1

请检查下面的代码。如果我从最后一行删除$ 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);

        }
    }
}
python excel perl projects-and-solutions
1个回答
2
投票

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,那将不是我的首选电子表格操作)。

© www.soinside.com 2019 - 2024. All rights reserved.