2017-09-20 13 views
0

6 개의 열과 50k 행의 시트가 있습니다. 한 번만 n 번 복사하고 싶습니다. 은 지금 나는이 같은 일을 오전 :Apache POI 수식이있는 행 복사 n 번

for (int i=0; i<=excel_max_row; i++) { 
     row = sheet3.createRow((short) i); 
     cell = row.createCell(0); 
     cell.setCellFormula("IFERROR(LOOKUP(Template!A"+(i+2)+",'Dropdown-Values'!A:A,'Dropdown-Values'!B:B),\"\")"); 

     cell = row.createCell(1); 
     cell.setCellFormula("IF(Template!B"+(i+2)+"=0,\"\",Template!B"+(i+2)+")"); 

     cell = row.createCell(2); 
     cell.setCellFormula("IFERROR(LOOKUP(Template!C"+(i+2)+",'Dropdown-Values'!C:C,'Dropdown-Values'!D:D),\"\")"); 

     cell = row.createCell(3); 
     cell.setCellFormula("IFERROR(LOOKUP(Template!D"+(i+2)+",'Dropdown-Values'!E:E,'Dropdown-Values'!F:F),\"\")"); 

     cell = row.createCell(4); 
     cell.setCellFormula("IFERROR(LOOKUP(Template!E"+(i+2)+",'Dropdown-Values'!E:E,'Dropdown-Values'!F:F),\"\")"); 

     cell = row.createCell(5); 
     cell.setCellFormula("IF(Template!F"+(i+2)+"=0,\"\",Template!F"+(i+2)+")"); 
} 
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb); 

그것은 작동하지만 excel_max_row는 50K까지 할 수 있기 때문에 매우 느립니다. 모든 포럼과 함께 행을 n 번 빠르게 복사 할 수있는 방법이 있습니까?

덕분에 많은

+0

를? – XtremeBaumer

+1

나는'evaluateAllFormulaCells'이 느려지는 주된 원인이라고 생각합니다. 대안에 대한 [공식 재 계산] (https://poi.apache.org/spreadsheet/eval.html#Recalculation+of+Formulas)을 읽으십시오. –

+0

200 행의 경우 221288ms, 예는 문제입니다. – ayasha

답변

1

사용자가 파일을 열 때 나는 모든 공식을 평가 :`매우 slow` 당신을 위해 무엇

wb.setForceFormulaRecalculation(true);