пустой JaxbSmlPart в новейших версиях xlsx4j - PullRequest
0 голосов
/ 23 октября 2019

Я надеюсь, что кто-нибудь подскажет мне, как решить эту проблему: после обновления 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).

Есть идеи, где я не прав? Спасибо!

1 Ответ

0 голосов
/ 23 октября 2019

У меня работает следующее:

    SharedStrings ss = xlsxPkg.getWorkbookPart().getSharedStrings();
    System.out.println(ss.getPartName().getName());
    System.out.println(ss.getXML());
...