简体   繁体   English

perl excel解析和修改相同的工作表

[英]perl excel parse and modify the same worksheet

I need to compare my XLS file with another one and modify the first (some cells) one accordingly. 我需要将我的XLS文件与另一个文件进行比较,并相应地修改第一个(某些单元格)文件。 I need to do it crossplatform so I use Spreadsheet::ParseExcel::SaveParser 我需要跨平台执行,所以我使用Spreadsheet :: ParseExcel :: SaveParser

Here is the subroutine I have so far 这是我到目前为止的子程序

sub find_occurrences
{
my $xlsname   = $_[0];
my $pattern   = $_[1];
my $parser    = Spreadsheet::ParseExcel::SaveParser->new();
my $workbook  = $parser->parse($xlsname);
my $worksheet = $workbook->worksheet(0) || die("$@$!");
my ( $row_min, $row_max ) = $worksheet->row_range();   
for my $row ( 0 .. $row_max ) {         
    $cell = $worksheet->get_cell( $row, 1 );
    next if (!$cell);    
    if($cell->value() =~ m/$pattern/i )
    {
        print "Order found ",$cell->value(),"\n";   
        $worksheet->AddCell( $row, 1, "Shop" );     
    }       

}
}

http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel/lib/Spreadsheet/ParseExcel/SaveParser.pm http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel/lib/Spreadsheet/ParseExcel/SaveParser.pm

Seems like example, bu I got this error: Can't locate object method "AddCell" via package "Spreadsheet::ParseExcel::Worksheet" at ./test.pl line 153. 好像是一个例子,但是我得到了这个错误:无法通过./test.pl第153行的包“ Spreadsheet :: ParseExcel :: Worksheet”找到对象方法“ AddCell”。

It is this one line 是这条线

$worksheet->AddCell( $row, 1, "Shop" ); $ worksheet-> AddCell($ row,1,“ Shop”);

I tried even add 我什至尝试添加

use Spreadsheet::ParseExcel::Worksheet;
use Spreadsheet::ParseExcel::Workbook;

I'm new to perl and i wasn't able to google something helpfull. 我是perl的新手,我无法在Google上找到有用的东西。

I guess you mixed up some code from Spreadsheet::ParseExcel and Spreadsheet::ParseExcel::SaveParser 我猜您混合了Spreadsheet::ParseExcelSpreadsheet::ParseExcel::SaveParser一些代码

The problem are the parse() , Parse() methods. 问题是parse()Parse()方法。 Unfortuntly the interface is not very transparant. 不幸的是,界面不是很透明。 If you call 如果你打电话

$parser->parse(...)

you get an Spreadsheet::ParseExcel::Workbook object, but if you use 您将获得一个Spreadsheet::ParseExcel::Workbook对象,但是如果使用

$parser->Parse(...)

you get an use Spreadsheet::ParseExcel::SaveParser::Workbook object. 您可以use Spreadsheet::ParseExcel::SaveParser::Workbook对象。

That is what you need! 那就是你所需要的! .

Here is my example: 这是我的示例:

#!/usr/bin/perl
use strict;
use warnings;

use Spreadsheet::ParseExcel::SaveParser;

find_occurrences ('Mappe1.xls', qr/.*/);

sub find_occurrences {
    my ($xlsname, $pattern) = @_;

    my $parser    = Spreadsheet::ParseExcel::SaveParser->new();
    my $workbook  = $parser->Parse($xlsname);
    my $worksheet = $workbook->worksheet(0) || die("$@$!");

    print "Workbook is a :". ref($workbook). "\n"; 

    my ( $row_min, $row_max ) = $worksheet->row_range();   
    for my $row ( 0 .. $row_max ) {         
        my $cell = $worksheet->get_cell( $row, 1 );
        next if (!$cell);    
        if($cell->value() =~ m/$pattern/i )
        {
            print "Order found ",$cell->value(),"\n";   
            $worksheet->AddCell($row, 1, "Shop" );     
        }       

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM