0

私は perl を初めて使用し、モジュール Spreadsheet::ParseExcel を使い始めたばかりです。使用している Excel シートに何も書き込みたくありません。スクリプトは基本的に Excel シート全体を実行し、値を行ごとに出力する必要があります。私は約250行と3列を持っています。したがって、出力は次のようになります。

   Glendale Academy  Mark  40%
   Glendale Academy  Tom   60%
   .....
   .....
   .....

端末で。

私はこの Windows を使用しています ( 検討する必要がWin32::OLEありWin32::OLE::Const 'Microsoft Excel'ます . ( シートの形式は? .xls 、 .xlsx 、 .csv ) これまでに行ったことは次のとおりです: この Web サイトで多くのスクリプトを実行した後、 「分割」を使用するのが最も簡単だと思いました。それは非常に簡単で、Excel になったので、これを使用する方法を理解できません。

これまでの私のスクリプトは次のとおりです。

use strict;
use warnings;
use Spreadsheet::ParseExcel;

my $reader   = Excel::Write::XLSX->new();  # I am sure something is wrong here
my $workbook  = Spreadsheet::WriteExcel->new('Draft.xls');
#my $workbook = $reader->read_file( 'Draft.xlsx' );

if ( !defined $workbook ) {
    die $reader->error(), "\n";
}

for my $worksheet ( $workbook->worksheets() ) {
    my $sheetname = $worksheet->name();
    print "Sheet = $sheetname\n";
    while ( my $row = $worksheet->next_row() ) {
        while ( my $cell = $row->next_cell() ) {
            my $row   = $cell->row();
            my $col   = $cell->col();
            my $value = $cell->value();
            print "  Cell ($row, $col) = $value\n";
        }
    }
}

どんな種類の助けも大歓迎です。ここ一週間くらい停滞中……。

4

1 に答える 1

1

最初のプログラムにはいくつか問題があります。

  1. 使用しているプログラムにはExcel::Write::XLSXタイプミスがあり、インポートされておらず、Spreadsheet::ParseExcel やデータの読み取りとは関係ありません。
  2. プログラムSpreadsheet::WriteExcelは、インポートされていないものを使用し、Spreadsheet::ParseExcel やデータの読み取りとは関係ありません。
  3. プログラムは、Excel::Reader::XLSX インターフェイス (next_rowおよびnext_cell) を使用しているようです。

Excel XLS ファイルからデータを読み取りたい場合は、Spreadsheet::ParseExcelドキュメントのインターフェイスとサンプル プログラムを使用してください。

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;

my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Draft.xls');

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();

    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";
        }
    }
}

__END__

上記のようなサンプル スプレッドシートに対して実行すると、次のようになります。

Row, Col    = (0, 0)
Value       = Glendale Academy
Unformatted = Glendale Academy

Row, Col    = (0, 1)
Value       = Mark
Unformatted = Mark

Row, Col    = (0, 2)
Value       = 40%
Unformatted = 0.4

Row, Col    = (1, 0)
Value       = Glendale Academy
Unformatted = Glendale Academy

Row, Col    = (1, 1)
Value       = Tom
Unformatted = Tom

Row, Col    = (1, 2)
Value       = 60%
Unformatted = 0.6
于 2013-03-01T11:27:11.013 に答える