все вместе.
роекта мне нужно создать.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>