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

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

我已经尝试使用$ worksheet-> write()和$ worksheet-> write_string(),但是当我使用$ workbook-> set_optimization()时,任何具有string而不是数字的字段将被省略。

如果我使用较旧的Spreadsheet :: WriteExcel模块,它工作得很好,但导出的文件大小要大得多,24MB与7MB

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

# 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: $!"; 

set_optimization()模式下编写数字或string应该没有问题。 事实上,有几个testing案例就是这样的 。

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

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

示例输出

请注意,string是左alignment,右边的数字表示Excel将它们视为string和数字数据。

另外,如果你使用write_string()方法,那么你将在任何一种情况下得到一个string。

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

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

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

为了减less内存使用,使用了set_optimization()方法,它不会将数据限制为数字。 它可以同时处理数字和string。

并循环遍历每一行

 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”。