使用POI读取.xlsx文件时出现错误:“Zip文件已关闭”。

6
public Sheet readExcel() throws Exception{
    //File fi=new File(new File(System.getProperty("user.dir"))+"\\src\\testdata2.xls");
    File fi=new File("C:\\Users\\admin\\workspace\\HMS\\src\\testdata\\testdata1.xlsx");

    Workbook wb = new XSSFWorkbook(fi);
    Sheet  Sheet = wb.getSheetAt(0);

    int rowCount = Sheet.getLastRowNum()-Sheet.getFirstRowNum();

    for (int i = 1; i < rowCount+1; i++) {
        Row row = Sheet.getRow(i);

        if(row.getCell(0).toString().length()==0){

            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+

            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        }
    }    
    return Sheet;   
}

通过运行上述代码,我得到了以下错误信息:

在主线程中抛出异常:java.lang.IllegalStateException: Zip File 已关闭 在org.apache.poi.openxml4j.util.ZipFileZipEntrySource.getEntries(ZipFileZipEntrySource.java:45) 在org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:186) 在org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:684) 在org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:254) 在org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:201) 在org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:294) 在ExcelReader.readExcel(ExcelReader.java:16) 在ExcelReader.main(ExcelReader.java:30)

请问有人能帮我找出问题的具体原因吗?
我尝试通过谷歌搜索解决方法,但没有结果!

你设置这些标签与webdriver有什么关联? - Anton Angelov
3个回答

11

要读取一个 xslx 文件,需要创建 FileInputStream 类的一个对象。

    //Create a object of File class to open xlsx file

    File file = new File("path/filename.xlsx");

    //Create an object of FileInputStream class to read excel file

    FileInputStream inputStream = new FileInputStream(file);

    //create object of XSSFWorkbook class

    Workbook wb = new XSSFWorkbook(inputStream);

希望这能帮助你...


0

尝试缩短文件名和文件路径。看起来在“”之间的字符长度有限制。这对我有用!


0

在创建XSSFWorkbook对象时,您不一定需要传递一个FileInputStream,您也可以将绝对路径+文件名作为字符串传递,它可以很长(我的长度是101个字符,双斜杠是108个字符,可能更长)。我刚刚在Windows 7下编写了一个小型本地应用程序,其唯一的参数是包含(除其他属性外)我想处理的.xlsx文件的绝对路径+文件名的属性文件(示例属性格式:datasetFile=C:\\Users\\jlm\\Documents\\Test Cases\\AAAS\\TestCase2JsonGenerator\\AAAS_g1.xlsx)。 我只需将datasetFile属性作为参数传递给XSSFWorkbook构造函数(示例代码行:wb = new XSSFWorkbook(tags.get("datasetFile"));)。 它完美运行,但不要忘记任何双斜杠,否则会出现“Zip文件已关闭”的异常(大约失去了2个小时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接