使用 apache poi 和 java 生成几个 excel 文件

Generate several excel files using apache poi and java

我必须生成几个 excel 文件,但是当使用 for 循环创建不同的文件时,它会抛出一个 EmptyFileException:the supplied file was empty。第一次它生成一个 excel 文件,但后来它抛出该异常。我试过关闭 FileInputStream,但没有用。

public static void mergeExcelFiles(ArrayList<Employe> employeList, Enterprise enterprise, List<FileInputStream> list) throws IOException {
    ArrayList<String> cell_formulas = generateCellToFormula();
    File file = null;

    for (int j = 0; j < employeList.size(); j++) {
        XSSFWorkbook book = new XSSFWorkbook();
        XSSFSheet sheet = null;
        file = new File(listaEmpleados.get(j).getNombre() + ".xlsx");
        try {
            for (FileInputStream fin : list) {
                XSSFWorkbook b = new XSSFWorkbook(fin);
                for (int i = 0; i < b.getNumberOfSheets(); i++) {
                    sheet = book.createSheet(b.getSheetName(i));
                    copySheets(book, sheet, b.getSheetAt(i));

                    }
                }
            }
            setDataWorkerInHoraryModel(book, enterpise, employeList.get(j));
            passWeekendToSheets(book);
            writeFile(book, file);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

https://poi.apache.org/apidocs/4.0/org/apache/poi/EmptyFileException.html

如果提供空(零字节)文件则抛出异常

 for (FileInputStream fin : list) {
                XSSFWorkbook b = new XSSFWorkbook(fin);
                for (int i = 0; i < b.getNumberOfSheets(); i++) {
                    sheet = book.createSheet(b.getSheetName(i));
                    copySheets(book, sheet, b.getSheetAt(i));

                    }
                }
            }

您传递的列表包含 0 字节的文件。

========= 已编辑 ===========

您正在执行 FileInputStream fin : list,该文件将被锁定。

如果你想释放你的系统资源,你需要关闭输入流。

在 forloop 的下一次迭代之前,

fin.close() 是您所需要的。