【发布时间】:2013-10-23 07:28:23
【问题描述】:
我能够使用 XSSF 读取现有 xlsm 并使用 SXSSF 将数据写入工作表。最后使用 Outputstream 将其作为另一个 xlsm 输出。
SXSSF 因在文档中编写 xlsx 而被提及
对于大数据读取和写入 xlsm 是否正确,否则如果通过此解决方案完成文件将被损坏?
这是有效的示例代码,
public static void main(String[] args) throws Throwable {
OPCPackage pkg = OPCPackage.open(new File("sample.xlsm"));
XSSFWorkbook wb_template;
wb_template = new XSSFWorkbook(
pkg
);
System.out.println("package loaded");
SXSSFWorkbook wb = new SXSSFWorkbook(wb_template);
wb.setCompressTempFiles(true);
SXSSFSheet sh = (SXSSFSheet) wb.createSheet();
sh.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk
for(int rownum = 4; rownum < 5000; rownum++){
Row row = sh.createRow(rownum);
for(int cellnum = 0; cellnum < 10; cellnum++){
Cell cell = row.createCell(cellnum);
String address = new CellReference(cell).formatAsString();
cell.setCellValue(address);
}
}
FileOutputStream out = new FileOutputStream(new File("C:\\ouput\\new_file.xlsm"));
wb.write(out);
out.close(); }
【问题讨论】:
-
SXSSF 仅用于非常大的文件。如果您的代码可以使用 XSSF 加载,为什么不继续使用它呢?
-
@Gagravarr:我将它作为 Web 应用程序进行了尝试,并为并发用户获取了堆转储。还有其他方法可以加载工作簿然后使用 sxssf 吗?
标签: java excel apache-poi xlsx xlsm