Excel :: Writer :: XLSX set_optimization()仅写入数字数据

时间:2013-02-14 14:55:15

标签: perl excel export-to-excel xlsx

我使用Excel :: Writer :: XLSX perl模块导出到Excel。除了大量出口需要很长时间之外,它工作得很好。但是,当我添加$ workbook-> set_optimization();我只在.xlsx文件中获取数字数据。

我尝试过使用$ worksheet-> write()和$ worksheet-> write_string()但是当我使用$ workbook-&gt时,任何有字符串而不是数字的字段都会被排除在导出之外; set_optimization();

如果我使用较旧的Spreadsheet :: WriteExcel模块,它可以正常工作,但导出的文件大小要大得多,24MB对比7MB

以下是创建标题行的代码:

# Create a new workbook
my $workbook = Excel::Writer::XLSX->new($file_path);

$workbook->set_optimization();

my $worksheet = $workbook->add_worksheet();
# insert the header row
my $header_cnt = 0;
foreach my $header_cell (@header_values){#loop through each header column and add it to the sheet
    # print $header_cell." - ".$header_cnt."\n";
    # $worksheet->write_string("0", $header_cnt, "test");
    $worksheet->write_string("0", $header_cnt, $header_cell);
    $header_cnt++;
}

$workbook->close() or die "Error closing file: $!";

2 个答案:

答案 0 :(得分:2)

set_optimization()模式下编写数字或字符串应该没有问题。实际上有several test cases just like that

我使用一些示例数据运行了程序的变体,输出显示正确。

#!/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();

example output

请注意,字符串左对齐,右边的数字表示Excel将它们视为字符串和数字数据。

此外,如果您使用write_string()方法,那么无论如何都会得到一个字符串。

您遇到的问题可能是在优化模式下,您需要按行列顺序写入数据,即该行中的每一行和每一列必须按顺序写入。

例如,如果您在for循环后添加这些行,则第二个数据将不会以优化模式显示:

$worksheet->write('A2', "This is fine");
$worksheet->write('A1', "I'm too late.");

答案 1 :(得分:0)

为了减少内存使用量,使用了set_optimization()方法,它不会将数据限制为数字。它既可以处理数字也可以处理字符串。

循环遍历每一行

foreach my $record (@records){
  $row++;
  $col = 0;

  foreach my $data (@{$record}){
      $worksheet->write($row,$col,$data);       
      $col++;
  }
}   

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