Я скачал последнюю версию Apache POI и безуспешно пытаюсь прочитать файл .xlsm, используя VBAMacroExtractor и VBAMacroReader, упомянутые в ссылке (http://poi.apache.org/components/spreadsheet/limitations.html). На самом деле Я не хочу Чтобы сделать что-нибудь с макросами, просто нужно прочитать Excel, который имеет расширение .xlsm, а также записать данные. Моё условие - я не могу удалить макросы из-за каких-то бизнес-условий. Пожалуйста, предложите, правильный ли этот подход. Также я пытался использовать 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"));
Код при использовании XSSFWorkbook ниже
OPCPackage pkg = OPCPackage.open(new File("Test.xlsm"));
XSSFWorkbook workBook = new XSSFWorkbook(pkg);
System.out.println(workBook.getSheetAt(0));
StackTrace ошибки приведен ниже: Исключение в потоке "main" org. apache .poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: предоставленные данные отображаются в формате OLE2. Вы вызываете ту часть POI, которая касается документов OO XML (Office Open XML). Вам необходимо вызвать другую часть POI для обработки этих данных (например, HSSF вместо XSSF) в org. apache .poi.openxml4j.op c .internal.ZipHelper.verifyZipHeader (ZipHelper. java: 147) в орг. apache .poi.openxml4j.op c .internal.ZipHelper.openZipFile (ZipHelper. java: 201) в орг. . java: 140) в орг. apache .poi.openxml4j.op c .OPCPackage.open (OPCPackage. java: 277) в орг. apache .poi.openxml4j.op c .OPCPackage.open (OPCPackage. java: 186) в com.tandem.file.operation.ReadingCellData.main (ReadingCellData. java: 28)