Java 至 excel 未写入多个工作表

Java to excel not writing to multiple sheets

我正在使用 Apache POI 和 Java 进行 SQL 查询并格式化数据并将其放入两个单独的 sheet 中。第一个 sheet 工作正常,但它从不将数据加载到第二个 sheet。我试过只使用第二个 sheet 的代码,只要第一个 sheet 的代码被注释掉,它就可以工作。这让我相信这是由我糟糕的 java 代码造成的。 代码如下

public static void createSheet1(ResultSet rs3) throws SQLException, FileNotFoundException {
    Desktop dt = Desktop.getDesktop();
    //CREATE WORKBOOK
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Run Tickets");
    int i=0;
    while (rs3.next()){
        if (i <= 0){
            XSSFRow rowhead = sheet.createRow((short)0);
            XSSFCellStyle style = workbook.createCellStyle();
            XSSFFont defaultFont = workbook.createFont();
            defaultFont.setBold(true);
            defaultFont.setFontHeight(13);
            style.setFont(defaultFont);         
            rowhead.createCell((short) 0).setCellValue("ROUTE_NAME");
            rowhead.createCell((short) 1).setCellValue("STOP_NAME");
            rowhead.createCell((short) 2).setCellValue("EQUIP_NAME");
            rowhead.createCell((short) 3).setCellValue("DESTINATION");
            rowhead.createCell((short) 4).setCellValue("PURCHASER");
            rowhead.createCell((short) 5).setCellValue("Ticket DT");
            rowhead.createCell((short) 6).setCellValue("Ticket #");
            rowhead.createCell((short) 7).setCellValue("EQUIP_TYPE");
            rowhead.createCell((short) 8).setCellValue("OPEN_FEET");
            rowhead.createCell((short) 9).setCellValue("OPEN_INCH");
            rowhead.createCell((short) 10).setCellValue("OPEN_TMP");
            rowhead.createCell((short) 11).setCellValue("CLOSE_FEET");
            rowhead.createCell((short) 12).setCellValue("CLOSE_INCH");
            rowhead.createCell((short) 13).setCellValue("CLOSE_TMP");
            rowhead.createCell((short) 14).setCellValue("OBSV_GRAV");
            rowhead.createCell((short) 15).setCellValue("OBSV_TMP");
            rowhead.createCell((short) 16).setCellValue("BSW");
            rowhead.createCell((short) 17).setCellValue("CLOSE_DT");
            rowhead.createCell((short) 18).setCellValue("OPEN_VOLUME");
            rowhead.createCell((short) 19).setCellValue("CLOSE_VOLUME");
            rowhead.createCell((short) 20).setCellValue("GROSS_VOLUME");
            rowhead.createCell((short) 21).setCellValue("NET_VOLUME");
            rowhead.createCell((short) 22).setCellValue("STATION_NAME");

            for(int j =0; j<23;j++){
                rowhead.getCell(j).setCellStyle(style);

            }

        }
        else{

        XSSFRow row = sheet.createRow((short) i);
        row.createCell((short) 0).setCellValue(rs3.getString("ROUTE_NAME"));
        row.createCell((short) 1).setCellValue(rs3.getString("STOP_NAME"));
        row.createCell((short) 2).setCellValue(rs3.getString("EQUIP_NAME"));
        row.createCell((short) 3).setCellValue(rs3.getString("COMMENTS"));
        row.createCell((short) 4).setCellValue(rs3.getString("BA_NAME"));
        row.createCell((short) 5).setCellValue(rs3.getString("LQVOL_DT"));
        row.createCell((short) 6).setCellValue(rs3.getString("LQVOL_TRANS"));
        row.createCell((short) 7).setCellValue(rs3.getString("EQUIP_TYPE"));
        row.createCell((short) 8).setCellValue(rs3.getInt("OPEN_FEET"));
        row.createCell((short) 9).setCellValue(rs3.getInt("OPEN_INCH"));
        row.createCell((short) 10).setCellValue(rs3.getInt("OPEN_TMP"));
        row.createCell((short) 11).setCellValue(rs3.getInt("CLOSE_FEET"));
        row.createCell((short) 12).setCellValue(rs3.getInt("CLOSE_INCH"));
        row.createCell((short) 13).setCellValue(rs3.getInt("CLOSE_TMP"));
        row.createCell((short) 14).setCellValue(rs3.getInt("OBSV_GRAV"));
        row.createCell((short) 15).setCellValue(rs3.getInt("OBSV_TMP"));
        row.createCell((short) 16).setCellValue(rs3.getInt("BSW"));
        row.createCell((short) 17).setCellValue(rs3.getString("CLOSE_DT"));
        row.createCell((short) 18).setCellValue(rs3.getInt("OPEN_VOLUME"));
        row.createCell((short) 19).setCellValue(rs3.getInt("CLOSE_VOLUME"));
        row.createCell((short) 20).setCellValue(rs3.getInt("GROSS_VOLUME"));
        row.createCell((short) 21).setCellValue(rs3.getInt("NET_VOLUME"));
        row.createCell((short) 22).setCellValue(rs3.getString("STATION_NAME"));


        }
        ++i;

    }
    //AUTOSIZE COLUMNS
    int j =0;
    while(j<23)
    {
        sheet.autoSizeColumn(j);
        j++;
    }

    createSheet2(rs3,workbook, dt);
    outputExcel(workbook, dt);

}
public static XSSFWorkbook createSheet2(ResultSet rs3, XSSFWorkbook workbook, Desktop dt2) throws SQLException, FileNotFoundException {
    //CREATES SECOND SHEET "ALLOCATION"
    XSSFSheet sheet2 = workbook.createSheet("Allocation");
    int rowcnt = 0;
    while(rs3.next()){
        if(rowcnt == 0){
            XSSFRow rowhead2 = sheet2.createRow((short)0);
            XSSFCellStyle style = workbook.createCellStyle();
            XSSFFont defaultFont = workbook.createFont();
            defaultFont.setBold(true);
            defaultFont.setFontHeight(13);
            style.setFont(defaultFont); 
            rowhead2.createCell((short) 0).setCellValue(rs3.getString("STATION_NAME"));
        }
        rowcnt++;

    }
    return workbook;
}
public static void outputExcel(XSSFWorkbook workbook, Desktop dt) throws FileNotFoundException {
    String yemi = "M:/MonthlyEndClosing.xlsx";
    FileOutputStream fileOut = new FileOutputStream(yemi);
    try {
        workbook.write(fileOut);
        fileOut.close();
        workbook.close();
    } catch (IOException e) {
        e.printStackTrace();
    }



    try {
        dt.open(new File("M:/MonthlyEndClosing.xlsx"));
    } catch (IOException e) {
        e.printStackTrace();
    }

}

我只用一种方法尝试过,分开 类 现在用两种方法尝试,结果相同。感谢您提供的任何帮助。

您的问题不在 POI API 使用中,而是在您的结果集中:

while (rs3.next()){
    ...
}
//rs3.next() will now be false