Я надеюсь, что кто-нибудь подскажет мне, как решить эту проблему: после обновления java до 11 и docx4j до 11.1.3 (пробовал 8.1.3 в качестве альтернативы с тем же результатом), я не могу получить содержимоеSharedStrings часть файлов xlsx. Это происходит даже с примерами файлов (например, VariableReplace или PartsList).
Вот код, который я использовал для оценки проблемы. Он взят из примера файла VariableReplace:
SpreadsheetMLPackage opcPackagepkg = SpreadsheetMLPackage.load(new File(inputfilepath));
System.out.println("\n\nPART TYPE\n\n:" + opcPackagepkg.getParts().get(new PartName("/xl/sharedStrings.xml")).toString()); // gives correct type "org.docx4j.openpackaging.parts.SpreadsheetML.SharedStrings@79518e00"
JaxbSmlPart smlPart = (JaxbSmlPart)opcPackagepkg.getParts().get(new PartName("/xl/sharedStrings.xml"));
System.out.println("\n\nBEFORE sml\n:" + smlPart.getXML()); // smlPart.getXML() gives null as result
// and so, of course, the following ends with an exception:
HashMap<String, String> mappings = new HashMap<String, String>();
mappings.put("title1", "This is a title");
smlPart.variableReplace(mappings); // ends with an NullPointerException
Я пробовал несколько файлов Excel, чтобы убедиться, что они не повреждены. Каждый раз тот же результат. Я также разархивировал файлы Excel для просмотра файла /xl/sharedStrings.xml. Я даже пытался использовать строку
JaxbSmlPart smlPart = (JaxbSmlPart)opcPackagepkg.getParts().get(new PartName("/xl/worksheets/sheet1.xml"));
, но это дает мне правильный результат, который должен быть WorkSheetPart (который корректно приводит к исключению docx4j, потому что это не часть SharedStrings).
Есть идеи, где я не прав? Спасибо!