2017-02-17 2 views
0

Je veux créer un document Excel avec 5 feuilles, les données pour les feuilles sont dynamiques et j'ai une limite de ligne maximale. Actuellement, mon approche consiste à créer une feuille à la fois et à la remplir de données. Je vérifie si les lignes max ont été dépassées et crée un nouveau document Excel. Cependant, cela ne sera pas attendre pour vérifier si les autres feuilles dépassent aussi la limite de la ligne max avant de créer le nouveau classeurCréation d'un fichier Excel supplémentaire en utilisant java et POIExcel Util si les lignes max ont été dépassées

Mes exemples de code

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

Je veux attendre que toutes mes 4 feuilles aient été créées et remplies avant de prendre soin des lignes supplémentaires dans la première feuille –

Répondre

1

Je suppose que vous voulez passer à la feuille suivante lorsque le sheet est plein. Voici l'astuce.

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