6

私のスクリプトは「xls」では機能しますが、「xlsx」では機能しません。エラーが発生するコードは次のとおりCan't call method "worksheet" on an undefined valueです。ファイルが「xlsx」の場合、私が行うコードは次のとおりです。持ってる:

#!/usr/bin/perl -w

use warnings;
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::XLSX;
use Date::Format;

my $filename = "../test.xlsx";
#Parse excel file
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse("$filename");

#Get cell value from excel sheet1 row 1 column 2
my $worksheet = $workbook->worksheet('Sheet1');
my $cell = $worksheet->get_cell(0,1);

# Print the cell value when not blank
if ( defined $cell and $cell->value() ne "") {
    my $value = $cell->value();
    print "cell value is $value \n";
}
4

3 に答える 3

3

CPAN モジュールSpreadsheet::ParseXLSXを使用してファイルを解析することもできxlsxます。

ドキュメントから:

use Spreadsheet::ParseXLSX;

my $parser = Spreadsheet::ParseXLSX->new;
my $workbook = $parser->parse("file.xlsx");

詳細なドキュメントについては、 Spreadsheet::ParseExcelを参照してください。

于 2015-04-15T11:59:47.653 に答える
2

ファイルの読み取りに使用する実際のパーサー モジュールを決定できる Spreadsheet::Read perl モジュールがインストールされていると仮定すると、以下のコード フラグメントは、入力ワークブックの 1 番目のワークシートのセルを読み取り、出力します。$workbook オブジェクトを調べて、構成可能なすべてのオプションを確認できます。このモジュールを使用して、「csv」、「xls」などの他の形式のファイルを読み取ることもできます。これは私が役に立つと思ったチュートリアルへのリンクです:

http://search.cpan.org/~hmbrand/Spreadsheet-Read/Read.pm

use Spreadsheet::Read;
############################################################################
# function input  : file in xlsx format with absolute path 
# function output : prints 1st worksheet content if exist
############################################################################
sub print_xlsx_file{

    my $file_path = shift;
    my $workbook = ReadData($file_path,cells => 0 );
    if(defined $workbook->[0]{'error'}){
        print "Error occurred while processing $file_path:".
              $workbook->[0]{'error'}."\n";
        exit(-1);
    }
    my $worksheet = $workbook->[1];
    my $max_rows = $worksheet->{'maxrow'};
    my $max_cols = $worksheet->{'maxcol'};

    for my $row_num (1..($max_rows))
    {
        for my $col_num (1..($max_cols)){
            print $worksheet->{'cell'}[$col_num][$row_num]."\n";
        }
    }
}
# call above function
# print_xlsx_file("/home/chammu/mybook.xlsx");
于 2014-08-31T15:29:32.447 に答える