如何使用SXSSF写入现有文件?

3 java excel apache-poi xssf

我有一个.xlsx文件,其中包含包含不同数据的多个工作表。在所有工作表中,一个工作表需要容纳近100,000行数据,并且数据需要使用带poi的Java写入。

对于SXSSFWorkbook来说,这似乎非常简单快捷,其中我只能在内存中保留100行,但是缺点是我只能写入一个新文件(或覆盖现有文件)。

另外,不允许我“加载”现有文件,即

 SXSSFWorkbook wb = new SXSSFWorkbook(file_input_stream) 
Run Code Online (Sandbox Code Playgroud) 不允许。

我可以使用Workbook工厂:

Workbook workbook = new SXSSFWorkbook();
workbook = WorkbookFactory.create(file_input_stream);
Run Code Online (Sandbox Code Playgroud)

但是当我需要冲洗行时,

 ((SXSSFSheet)sheet).flushRows(100); 
Run Code Online (Sandbox Code Playgroud)

我收到错误消息,不允许从XSSFSheet到SXSSFSheet进行类型转换。

我试图查看是否有任何方法可以在不同的工作簿之间复制工作表,但到目前为止,似乎必须逐个单元地完成工作。

有关如何解决此问题的任何见解?

Oli*_*liv 6

您可能正在向其添加大数据的模板。您需要使用SXSSFWorkbook(XSSFWorkbook)构造函数:

XSSFWorkbook wb = new XSSFWorkbook(new File("template.xlsx"));
SXSSFWorkbook wbss = new SXSSFWorkbook(wb, 100);
Sheet sheet = wbss.createSheet("sheet1");
// now add rows to sheet
Run Code Online (Sandbox Code Playgroud)

  • [如文档中所述,如果您有文件,请不要使用InputStream](http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream)!文件内存不足 (2认同)