Spreadsheet :: WriteExcel set_optimization()生成unlink错误

时间:2017-03-29 10:14:55

标签: linux excel perl memory

我们一直在使用Spreadsheet :: WriteExcel很长一段时间,这就像一个魅力。

几年前,我们迁移到了Excel-Writer-XLSX,它使用的内存比documentation中所述的WriteExcel多5倍。 感谢XLSX,用户现在可以生成更大的Excel文件。 我们几个星期后才开始面对内存使用问题,需要大约84%的服务器内存。

相同的文档指出$workbook->set_optimization()应解决问题。给定的性能数据很有希望。 我们尝试在示例文件上使用$workbook->set_optimization(),但这不起作用。它会生成取消链接错误。

如果删除set_optimization(),则会正确生成Excel文件。 该示例由作者在thread

中提供
#!/usr/bin/perl -w

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

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

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


my @header_values = ( 1, 2, 3, 'foo', 'bar', 6, 7 );
my $header_cnt    = 0;

for my $header_cell (@header_values){
    $worksheet->write(0, $header_cnt, $header_cell);
    $header_cnt++;
}

$workbook->close();

Error unlinking file /opt/.../rKhGTRYWSJ using unlink0 at /usr/local/share/perl5/Excel/Writer/XLSX/Worksheet.pm line 204
(in cleanup) Error unlinking file /opt/.../iGr8Qo8VBD using unlink0 at /usr/local/share/perl5/Excel/Writer/XLSX/Worksheet.pm line 204

我们正在运行:

  • Excel-Writer-XLSX 0.70
  • perl v5.10.1
  • 红帽企业Linux服务器版本6.8(圣地亚哥)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

Excel :: Writer :: XLSX用于在XLSX中写入大量数据并处理大数据并减少内存使用量。使用set_optimization()方法。

在XLSX文件中,工作簿最多可以创建10,48,576行,并且可以创建16,384列,如果行数超过最大限制,则可以在同一工作簿中创建新工作表,并且以这种方式创建大量的工作表数据可以处理。

请参阅此链接https://github.com/AarthiRT/Excel_Writer_XLSX中的“Write_largeData_XLSX.pl”以获取更多详细信息。