SpreadsheetMLPackage.load из docx4j в Java возвращает файл OO XML, а не файл XLSX - PullRequest
0 голосов
/ 30 апреля 2020

Я открываю файл XLSX следующим образом:

File file = new File("myPath/to/file.xlsx");
SpreadsheetMLPackage pkg = SpreadsheetMLPackage.load(file);

Затем, не делая ничего, сохраняю его в том же файле:

pkg.save(file);

Мой файл теперь это файл Microsoft OO XML, а не файл Microsoft Excel 2007+ , как это было раньше.

Как я могу получить файл Microsoft Excel 2007+?

Примечание

Если я создаю новый файл, подобный этому:

SpreadsheetMLPackage pkg = SpreadsheetMLPackage.createPackage();
pkg.save(file);

Мой вывод - файл Microsoft Excel 2007+. Поэтому кажется странным, что при загрузке файла конвертируйте его в формат OO XML.

Шаги для воспроизведения

  1. Создайте файл Excel (для меня на windows с Excel 2013 ) и сохраните его как test.xlsx.
  2. Передайте этот файл в Ubuntu. Запустите эту команду: file test.xlsx, вы получите test.xlsx: Microsoft Excel 2007+.
  3. Выполните этот скрипт:

    try {
        File file = new File("/home/userName/Downloads/test.xlsx");
        SpreadsheetMLPackage pkg = SpreadsheetMLPackage.load(file);
        pkg.save(file);
    } catch (Docx4JException e1) {e1.printStackTrace();}
    
  4. Запустите снова эту команду: file test.xlsx и на этот раз вы получите test.xlsx: Microsoft OOXML.

...