2014-09-25 35 views
1
use Excel::Writer::XLSX; 
my $workbook = Excel::Writer::XLSX->new('test.xlsx'); 
$workbook->set_optimization(); 
my $row = 0; 
my $col = 0; 
$row++; 
my $worksheet = $workbook->add_worksheet(); 
foreach (sort { lc($a) cmp lc($b); } keys %hash) { 
    my $value = $_; 
    $col = 0; 
    my @array = split('\t', $value); 
    foreach my $val (@array) { 
     $worksheet->write($row, $col, $val); 
     $col++; 
    } 
    $row++; 
} 
$workbook->close(); 

我在一个散列中存储了大量数据(> 70MB),并且通过使用上面的代码我将把数据写入excel文件。但它显示出内存不足的错误。请帮我解决这个的issue.thanks写入庞大的日期到excel文件中perl

+0

你是如何生成散列给你的'内存不足'错误?如果使用Excel :: Writer :: XLSX导致内存不足错误,为什么不创建CSV或制表符分隔文件,然后将其导入到Excel中? – 2014-09-25 08:18:19

+1

您可能想要执行内存分析。 http://stackoverflow.com/a/1360142/223226 – 2014-09-25 08:27:16

+0

我从Excel中读取数据并完成一些计算并存储在散列表中。现在我必须编写数据以获得所需的信息[模板] – Bharu 2014-09-25 08:51:36

回答

1

的Excel ::作家:: XLSX不应该,因为你正在使用set_optimization()模式可减少内存使用量下降到small and constant value.

引起“内存不足”的问题

但是,将70 MB文件加载到散列可能(取决于您的系统)。

也许你可以重构你的程序,一次读取(然后写入)一行数据,而不会将所有内容加载到内存中。

+0

号。我写练成具有标准模板.. – Bharu 2014-09-25 10:03:25

+0

望着代码段,你在评论你的问题上面张贴看起来你也从一个Excel文件中读取数据。关于这一点的一些评论:1.这可能是Excel阅读和哈希构建烧毁你的记忆。 2.如果您使用Spreadsheet :: ParseExcel读取Excel文件,那么可能会消耗大量内存。有关如何减少此信息的信息,请参阅文档。 3.为什么要将信息存储在散列表中。为什么不在读取时将它写入Excel文件(与第2项结合使用)。 – jmcnamara 2014-09-25 16:00:52