使用Apache POI HSSF,我们可以像这样创建xls文件
private void write(HSSFWorkbook workbook) {
POIFSFileSystem filesystem = new POIFSFileSystem();
filesystem.createDocument(new ByteArrayInputStream(workbook.getBytes()),
"Workbook");
FileOutputStream stream = new FileOutputStream("test.xls");
filesystem.writeFilesystem(stream);
}
同样,我如何用XSSFWorkbook
书写?这没有getBytes()
方法
我尝试从ByteArrayInputStream
创建XSSFWorkbook
,就像这样 -
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos); //XSSFWorkbook here
ByteArrayInputStream bias = new ByteArrayInputStream(baos.toByteArray());
但是创建的xlsx文件已损坏。如何使用POIFSFileSystem
将工作簿写入光盘?
当我这样做时,成功地写了XSSFWorkbook
-
FileOutputStream stream = new FileOutputStream("test.xlsx");
workbook.write(stream);
当我提取并比较xlsx文件时,没有区别。但是,当我直接对xlsx文件进行纯文本比较(不提取)时,字节差异很小。
所以问题应该出现在createDocument()
的{{1}}和/或writeFilesystem()
方法中。有人可以告诉我如何使用POIFSFileSystem
撰写XSSFWorkbook
吗?
答案 0 :(得分:4)
你不能!
POIFSFileSystem与OLE2文件一起使用,例如.xls,.doc,.ppt,.msg等.POIFS代码处理为您读取和写入各个流。
使用OOXML文件(.xlsx,.docx,.pptx等),文件的容器不再是OLE2。相反,文件存储在Zip容器中。在POI中,这由OPCPackage处理,OPCPackage负责从Zip文件读取和写入所需的OOXML元数据。
如果要将XSSF文件写入磁盘,只需执行以下操作:
FileOutputStream stream = new FileOutputStream("test.xlsx");
workbook.write(stream);
stream.close();
XSSFWorkbook将处理与OPCPackage的谈话,让您实现这一目标。