2017-02-17 11 views
0

5 개의 시트가있는 Excel 문서를 만들고 싶습니다. 시트의 데이터는 동적이며 최대 행 제한이 있습니다. 현재 내 접근 방식은 한 번에 하나의 시트를 작성하고 데이터로 채 웁니다. 최대 행을 초과했는지 확인하고 새로운 Excel 문서를 만드는 중입니다. 그러나이최대 행이 초과 된 경우 Java 및 POIExcel 유틸리티를 사용하여 엑셀 파일을 추가로 작성하십시오.

내 코드 샘플

private void populateDetailsSheets(String[] data) throws IOException 
    { 
     currentRow = getCurrentRow(); 
     rowCount++; 
     short cellNumber = 0; 
     for (String value : data) 
     { 
     POIExcelUtil.createCellWithContent(currentRow,value,cellNumber++).setCellStyle(contentStyle); 
     } 
     writeToFileOnExhaustingMaxRows(); 
    } 



private void writeToFileOnExhaustingMaxRows() throws IOException 
    { 
     if(sheet.getLastRowNum() + 2 > Integer.valueOf(SystemProperty.MAX_RECORDS_PER_EXCEL)) 
     { 
     writeToFile(); 
     rowCount = 0; 
     createWorkbook(); 
     titleStyle = createTitleStyle(); 
     headerStyle = createHeaderStyle(); 
     columnHeaderStyle = createColumnHeaderStyle(); 
     columnHeaderStyle.setBorderLeft(CellStyle.BORDER_MEDIUM); 
     columnHeaderStyle.setBorderTop(CellStyle.BORDER_MEDIUM); 
     columnHeaderStyle.setBorderRight(CellStyle.BORDER_MEDIUM); 
     columnHeaderStyle.setBorderBottom(CellStyle.BORDER_MEDIUM); 
     contentStyle = createCellStyle(); 
     contentStyle.setBorderLeft(CellStyle.BORDER_THIN); 
     contentStyle.setBorderTop(CellStyle.BORDER_THIN); 
     contentStyle.setBorderRight(CellStyle.BORDER_THIN); 
     contentStyle.setBorderBottom(CellStyle.BORDER_THIN); 
     rowCount = 0; 
     createSheet("title sheet"); 
     populateReportSettingsSheet(); 

     rowCount =0; 
     createSheet(sheetNames[index]); 
     setColumnWidth(); 
     createColumnHeader(); 
     } 
    } 
+0

첫 번째 시트에서 여분의 행을 처리하기 전에 모든 4 개의 시트가 작성되고 채워질 때까지 기다려야합니다. –

답변

1

난 당신이 다음 시트 때 이동하려는 가정입니다에게 새 통합 문서를 작성하기 전에 다른 시트는 최대 행 제한을 초과하는 경우 확인하기 위해 기다리지 않습니다 sheet 하나가 찼습니다. 여기 트릭.

public class JumpToNewSheet { 
private static HSSFSheet allocateNewSheet(HSSFWorkbook wb, String sheetName) { 
    HSSFSheet sheet = wb.createSheet(sheetName); 
    /*You can add style here too or write header here*/ 
    return sheet; 
} 
public HSSFWorkbook exportExcel_xls(MyTable table) { 
    int cellNumber = 12; 
    List<TupleData> tuples = table.getTuples(); 
    HSSFWorkbook wb = new HSSFWorkbook();//Whole book 
    HSSFSheet currentSheet = allocateNewSheet(wb, "SHEET");//Initial sheet 
    int sheetCounter = 1;//Start at 1 because we already created Initial sheet 
    int rowCounter = 0;//1st row in sheet 
    for(TupleData t: tuples) {//Loop through data 
     if(rowCounter % 65535 == 0) {//Max row reached, build new sheet 
      //Increase sheetCounter 
      sheetCounter++; 
      String new_sheetName = "SHEET_"+sheetCounter;//Name of sheet 
      currentSheet = allocateNewSheet(wb, new_sheetName);//Point currentSheet to new sheet 
      //Reset rowCounter to 0 
      rowCounter = 0; 
     } 
     Row row = currentSheet.createRow(rowCounter); 
     for(int i=0; i <=cellNumber; i++) { 
      Cell cell = row.createCell(i); 
      //Write data....... 
      //............. 
     }//End inner for loop 
     rowCounter++; 
    }//End for loop 
    }//End exportExcel_xls(MyTable table) 
}