使用apachepoi和java生成几个excel文件

4sup72z8  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(355)

我必须生成几个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();
        }
    }
}
gmxoilav

gmxoilav1#

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,则会锁定该文件。
如果要释放系统资源,需要关闭inputstream。
在forloop的下一次迭代之前,您需要fin.close()。

相关问题