Excel 使用POI读取.xlsm宏文件不适用于VBAMacroReader和VBAMacroExtractor

Excel 使用POI读取.xlsm宏文件不适用于VBAMacroReader和VBAMacroExtractor,excel,apache-poi,Excel,Apache Poi,我下载了最新版本的ApachePOI,并尝试使用链接中提到的VBAMacroExtractor和VBAMacroReader读取.xlsm文件,但没有成功(我不想对宏执行任何操作,只需要读取扩展名为.xlsm的excel并写入数据。我的条件是,由于某些业务条件,我无法删除宏。请建议此方法是否正确。此外,我尝试使用XSSF和HSSF格式读取excel文件,但出现错误。请提供帮助 下面是我的示例代码 VBAMacroReader reader = new VBAMacroReader(new

我下载了最新版本的ApachePOI,并尝试使用链接中提到的VBAMacroExtractor和VBAMacroReader读取.xlsm文件,但没有成功(我不想对宏执行任何操作,只需要读取扩展名为.xlsm的excel并写入数据。我的条件是,由于某些业务条件,我无法删除宏。请建议此方法是否正确。此外,我尝试使用XSSF和HSSF格式读取excel文件,但出现错误。请提供帮助

下面是我的示例代码

    VBAMacroReader reader = new VBAMacroReader(new File("MyMacroExcel.xlsm"));
    Map<String, String>  mymap = reader.readMacros();
    mymap.forEach((k,v)-> System.out.println("Key:"+k+" Value:"+v));
    //  XSSFWorkbook nextWorkbook = XSSFWorkbookFactory.createWorkbook(myFile, true);

    VBAMacroExtractor extractor = new VBAMacroExtractor();
    extractor.extract(new File("MyMacroExcel.xlsm"), new File("Output.xlsm"));
错误的堆栈跟踪如下所示: 线程“main”org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException中的异常:提供的数据似乎是OLE2格式。您正在调用poi中处理OOXML(Office Open XML)文档的部分。您需要调用poi的其他部分来处理此数据(例如HSSF而不是XSSF) 位于org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:147) 位于org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipFile(ZipHelper.java:201) 在org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:140) 位于org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:277) 位于org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:186)
位于com.tandem.file.operation.ReadingCellData.main(ReadingCellData.java:28)

您会遇到什么错误?请在您的问题中提供堆栈跟踪。我已经在Axel上方添加了代码和堆栈跟踪。请指导我。错误非常清楚。您的
Test.xlsm
不是
Office Open XML
格式。但是根据名称
*.xlsm
应该是。如果使用
Excel打开此文件会发生什么
然后以
*.xlsm
格式重新保存?是否
apache poi
可以打开它?如果可以,则原始文件以某种方式处于损坏的文件格式。完美文件处于损坏状态。感谢您的帮助!!
OPCPackage pkg = OPCPackage.open(new File("Test.xlsm"));
    XSSFWorkbook workBook = new XSSFWorkbook(pkg);
    System.out.println(workBook.getSheetAt(0));