【问题标题】:Spreadsheet::WriteExcel set_optimization() generates unlink errorsSpreadsheet::WriteExcel set_optimization() 生成取消链接错误
【发布时间】:2017-05-18 23:20:25
【问题描述】:

我们一直在使用 Spreadsheet::WriteExcel 很长时间以来,它的工作原理就像一个魅力。

几年前,我们迁移到 Excel-Writer-XLSX,它使用的内存是 WriteExcel 的 5 倍,如 documentation 中所述。 多亏了 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
  • Red Hat Enterprise Linux Server 6.8 版(圣地亚哥)

任何帮助将不胜感激。

【问题讨论】:

  • 您需要包含一个示例,因为我们不知道您的代码中发生了什么。
  • edit 在您的问题中使用正确的格式。最好包含您自己的示例,因为您的问题应该能够独立存在,无需外部资源。即使该资源在现场,它仍然不是这个问题的一部分。谢谢。
  • 我找到了使用 0.76 版的示例,这些示例使用了 $workbook->set_optimization(),但没有找到运行 0.70 版的旧示例。我们无法单独安装最新版本,因为我们使用的是 Redhat 提供的版本

标签: linux excel perl memory


【解决方案1】:

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

在 XLSX 文件中,一个工作簿最多可以有 10,48,576 行和 16,384 列,如果行数超过最大限制,可以在同一个工作簿中创建一个新工作表,这样就可以创建大量可以处理数据。

更多详情,请参阅此链接https://github.com/AarthiRT/Excel_Writer_XLSX 中的“Write_largeData_XLSX.pl”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多