Чтение файла макроса .xlsm с использованием POI не работает с VBAMacroReader и VBAMacroExtractor - PullRequest
0 голосов
/ 19 февраля 2020

Я скачал последнюю версию 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...