1

Excel::Writer::XLSX を使用して、85,000 行を超える行を .xlsx ファイルにエクスポートできないようです。85,000 行を超えるデータをエクスポートすると、データが含まれていない 5 KB のファイルが生成されます。スクリプトの実行時間は、85,000 レコードまたは 90,000 レコードをエクスポートする場合とほぼ同じです (約 40 秒)。

85,000 行のファイルは 7.9MB ですが、90,000 行のファイルはわずか 5KB です。

top を使用してエクスポート スクリプトを監視すると、私の perl スクリプトはメモリ使用量が約 1% しか表示されず、数秒後に消えます。私は perl を初めて使用するので、メモリが不足しているかどうかを確認するために監視する必要がある別のプロセスがあるかどうかわかりません。

perl スクリプトは、85,000 行以下をエクスポートする場合、実際には約 7% のメモリ使用量を示し、エクスポートが完了するまでプロセス リストに残ります。

4

2 に答える 2

2

次のプログラムで 90,000x20 のワークシートを生成しようとしましたが、出力ファイルは問題ありませんでした。あなたが報告したよりも少し小さかった(〜6MB)が、圧縮が含まれているため、入力データに依存する:

#!/usr/bin/perl -w

use strict;
use warnings;
use Excel::Writer::XLSX;

my $workbook  = Excel::Writer::XLSX->new('bigfile.xlsx');
$workbook->set_optimization();

my $worksheet = $workbook->add_worksheet();

$worksheet->set_column(0, 50, 18);

for my $row (0 .. 90000 -1) {
    for my $col (0 .. 20 -1) {
        $worksheet->write($row, $col, "Row: $row Col: $col");
    }
}

__END__

私の他の唯一の提案は、Excel::Writer::XLSX >= 0.51 のバージョンを使用していることを確認することです。これは、その前に最適化モードでメモリ リークがあったためです。

その後、バグレポートを提出する必要があると思います。Excel::Writer::XLSX bug_report.plプログラムによって生成された出力を必ず添付してください。

于 2013-02-20T15:38:27.823 に答える
1

これを解決するために試みることができる2つのことがあります。

  1. デストラクタの暗黙的なクローズが何らかの方法で阻止されている場合に備えて、プログラムの最後に明示的なワークブックclose()を追加します。
  2. プロセスのメモリが不足している場合は、 set_optimisation()モードを試してください。
于 2013-02-19T21:24:46.703 に答える