2017-02-17 3 views
0

Я хочу создать документ excel с 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) 
} 
Смежные вопросы