1

我正在使用 POI 3.2(我可以用于我的客户端的最新版本)在 Java 中生成一个 Excel 文件。这是我的代码。如您所见,我正在使用 HSSF,因为我需要制作一个 XLS 文件。

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Reporting");
sheet.setColumnWidth(250,250);
HSSFRow Row;
HSSFCell Cell;

//Content part (doesn't matter)


IWDResource resource = WDResourceFactory.createCachedResource(
                wb.getBytes(),
                "workbook.xls",
                WDWebResourceType.XLS);

wdContext.currentContextElement().setXls(resource);

现在,在我下载了 XLS 文件后,我想打开它,但文件似乎已损坏。

图片链接:http ://tinyurl.com/nop52sh

当我在“不发送”上按 2 次时,de excel 文件以正确的形式打开。

知道为什么吗?

4

1 回答 1

3

不要打电话wb.getBytes(),它不会做你想做的事。从getBytes() javadoc

方法 getBytes - 仅获取 XLS 文件的 HSSF 部分的字节。使用它自己构建一个 POI POIFSFileSystem。

相反,如果您希望将整个 xls 文件作为字节数组,请执行

ByteArrayOutStream baos = new ByteArrayOutStream();
wb.write(baos);
byte[] xlsBytes = baos.toByteArray();

最后,Apache POI 3.2 很古老,现在已经超过 5 年了!你真的应该升级,查看更新日志以了解从那时起修复的所有错误

于 2014-03-07T04:45:53.420 回答