2017-02-17 2 views
0

Ich möchte ein Excel-Dokument mit 5 Blättern erstellen, die Daten für die Blätter sind dynamisch und ich habe ein maximales Zeilenlimit. Derzeit erstellt mein Ansatz ein Blatt nach dem anderen und füllt es mit Daten. Ich überprüfe, ob maximale Zeilen überschritten wurden, und erstelle ein neues Excel-Dokument. Dies wird jedoch nicht zu überprüfen, warten, wenn die anderen Blätter übersteigen auch die maximale Zeilenlimit, bevor die neue Arbeitsmappe ErstellenErstellen einer Excel-Datei mit Java und POIExcel util, wenn die Anzahl der Zeilen überschritten wurde

Meine Codebeispiele

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

Ich möchte warten, bis alle meine 4 Blätter erstellt und gefüllt wurden, bevor ich mich um die zusätzlichen Zeilen im ersten Blatt kümmere –

Antwort

1

Ich gehe davon aus, dass Sie zum nächsten Blatt springen soll, wenn die sheet man ist voll. Hier der Trick.

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) 
} 
Verwandte Themen