0

XLS ファイルを別のファイルと比較し、それに応じて最初の (一部のセル) ファイルを変更する必要があります。クロスプラットフォームで行う必要があるため、Spreadsheet::ParseExcel::SaveParser を使用します

ここに私がこれまでに持っているサブルーチンがあります

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

例のようですが、このエラーが発生しました: ./test.pl 行 153 で、パッケージ "Spreadsheet::ParseExcel::Worksheet" を介してオブジェクト メソッド "AddCell" が見つかりません。

この一行です

$worksheet->AddCell( $row, 1, "ショップ" );

私も追加しようとしました

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

私はperlが初めてで、何か役立つことをグーグルで検索できませんでした。

4

1 に答える 1

1

Spreadsheet::ParseExcelと からのコードを混同したと思いますSpreadsheet::ParseExcel::SaveParser

問題はparse()Parse() メソッドです。残念ながら、インターフェースはあまり透明ではありません。電話すれば

$parser->parse(...)

オブジェクトを取得しSpreadsheet::ParseExcel::Workbookますが、使用する場合

$parser->Parse(...)

オブジェクトを取得しuse Spreadsheet::ParseExcel::SaveParser::Workbookます。

それがあなたが必要とするものです!.

これが私の例です:

#!/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" );     
        }       

    }
}
于 2013-02-25T14:13:47.963 に答える