все вместе.

роекта мне нужно создать.xlsm Excel документ автоматически заполняет файл шаблона. Проблема в том, что выходные данные повреждены и не могут быть прочитаны ни Excel 365, ни Apache POI.

Я перевел это на следующий минимальный пример, который может работать вmain метод. Чтобы быть полностью безопасным, он использует.xlsx формат.

public static void main(String[] args) {
    XSSFWorkbook document = new XSSFWorkbook();
    XSSFSheet spreadsheet = document.createSheet("Test");
    spreadsheet.createRow(0).createCell(0).setCellValue("Testie test");

    // Output .xlsx file
    FileOutputStream stream;
    try {
        stream = new FileOutputStream("test_output.xlsx");
        document.write(stream);
        stream.flush();
        stream.close();

    } catch (IOException e) {
        System.err.println("Error" + e.getMessage());
        e.printStackTrace();
    }
    ...

Созданный файлtest_output.xlsx не может быть открыт Excel 365 и имеет размер только 4 КБ, в то время как созданный вручную файл займет 9 КБ, поэтому в выводе должно быть что-то, что я не указал?

Я использую Apache POI версии 3.17, импортированный через Gradle, используя

compile('org.apache.poi:poi-ooxml:3.17')

а также с Apache POI версии 3.13, чтобы иметь версию до 2016 года. Не повезло в обоих случаях.

Когда основной метод расширяется, чтобы снова открыть тот же файл, который был только что создан, как показано ниже

    ...
    // Try to read it again
    try {
        document = new XSSFWorkbook("test_output.xlsx");
        System.out.println(document.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());

     } catch (IOException e) {
         e.printStackTrace();
     }
}

тогда я в конечном итоге в следующем исключении

java.io.IOException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Can't read content types part !
    at org.apache.poi.POIXMLDocument.openPackage(POIXMLDocument.java:91)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:340)
    ...

Если с другой стороны всеXSSF* заменяется наHSSF* и тип файла превращается в.xls файл, то выводимый документ в порядке, но мне нужно создать рабочий документ Excel 365, а не Excel 2003.

Следующее[Content_Types].xml файл в ручную.xlsx документ

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
    <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
    <Default Extension="xml" ContentType="application/xml"/>
    <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
    <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
    <Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
    <Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
    <Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
    <Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
    <Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
</Types>

Хотя следующее[Content_Types].xml в POI создан файл.xlsx

<?xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
    <Default ="rels"/>
    <Default ="xml"/>
    <Override ="/docProps/app.xml"/>
    <Override ="/docProps/core.xml"/>
    <Override ="/xl/sharedStrings.xml"/>
    <Override ="/xl/styles.xml"/>
    <Override ="/xl/workbook.xml"/>
    <Override ="/xl/worksheets/sheet1.xml"/>
</Types>

Ответы на вопрос(1)

Ваш ответ на вопрос