2014-09-25 33 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