我使用Apache POI 3.8生成了一個excel文件,並且需要複製某些現有的n°時間行。Apache POI公式單元格重複很慢
這是因爲我有一些複雜的公式,我用它作爲模板來創建新行,用正則表達式替換單元格索引。
問題是性能很糟糕,需要2小時才能生成4000行。
我已經指出問題不在正則表達式部分,正如我最初的想法,但在公式單元格的重複中。如果我複製公式爲文本這樣
case Cell.CELL_TYPE_FORMULA:
newCell.setCellType(oldCell.getCellType());
newCell.setCellFormula(oldCell.getCellFormula());
break;
:
實際上我用這個複製公式的單元格
case Cell.CELL_TYPE_FORMULA:
newCell.setCellType(Cell.CELL_TYPE_STRING);
newCell.setCellValue("="+oldCell.getCellFormula());
break;
這是不是非常快,甚至與我的地方正則表達式。
無論如何,這是一個不完美的解決方案,因爲公式有英文關鍵字(即IF()),當我需要用意大利語格式編寫時。
更多的是,像這樣插入公式的單元格需要在excel中強制重新評估,例如「用'='替換全部'=''。
由於HSSFFormulaParser.parse(),問題似乎依賴於setCellFormula()。
有什麼奇怪的是,解析時間似乎成倍增長:
100 rows -> 6785ms
200 rows -> 23933ms
300 rows -> 51388ms
400 rows -> 88586ms
似乎什麼,就是每次我複製一個公式,POI庫重新評估或重新解析或重新東西所有前面的行。
有誰知道如何解決這個問題? 在此先感謝。
您是否在代碼中的任何位置使用FormulaEvaluator?如果是這樣,它有可能會在循環內部,而不是在它應該在哪裏結束? – Gagravarr 2012-02-25 15:20:21
沒有運氣。我的代碼中沒有提及FormulaEvaluator。 原因似乎是 newCell.setCellFormula() 是否有任何替代方法複製單元格上的公式? – 2012-02-27 08:28:44