java - 如果超出最大行数,则使用 java 和 POIExcel util 创建额外的 excel 文件

标签 java apache-poi export-to-excel poi-hssf hssf

我想创建一个包含 5 个工作表的 Excel 文档,工作表的数据是动态的,并且我有最大行数限制。 目前我的方法是一次创建一张表,并用数据填充它。我正在检查是否超出最大行数,并创建一个新的 Excel 文档。 但是,在创建新工作簿之前,这不会等待检查其他工作表是否也超出最大行限制

我的代码示例

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

最佳答案

我假设您想在工作表已满时跳转到下一张工作表。窍门就在这里。

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

关于java - 如果超出最大行数,则使用 java 和 POIExcel util 创建额外的 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42289640/

相关文章:

Java - 知道给定字符串的星期几

java - 如何使用 apache POI 在 ms word doc 中使用 rowspan 和 colspan 创建表?

node.js - 在 Angular 6 中导出到 Excel 或 CSV

java - jsp自定义标签: doAfterBody method is not invoked

java - 为什么在用hashmap解Leetcode Two Sum的时候先查解再做map.put会失败?

java - 如何通过 Apache POI 使用公式从 Excel 检索日期

c++ - 读取文件夹中的所有文件,然后将每个文件及其匹配项放入新的 Excel 文档中。 C++ 有可能吗?

python - 通过python将图像嵌入到xls表中

java - 如何在 Android 的 LISTVIEW 中为每个原​​始图像添加不同的图像?

java - 读取Excel的空白单元格并返回List<List<String>>