使用XSSFWorkbook附加到现有的Excel文件

我想写一个代码,将数据添加到已经存在的Excel电子表格。 但是,当我运行这个代码文件变得损坏。

在这个代码的情况下,我试图添加一个电子表格,但我已经试过现有表单中的单元格,没有luch和所有相同的错误。 我错过了什么,看起来像我创build一个Excel添加一些数据然后写,closures它。 然后将新工作表添加到现有的工作簿并将其重新写入到stream中。

public class PlayWithExcel { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Workbook wb = new XSSFWorkbook(); XSSFSheet ws = (XSSFSheet) wb.createSheet("Initial Data"); XSSFSheet ws1 = (XSSFSheet) wb.createSheet("Cross Referenced"); XSSFSheet ws2 = (XSSFSheet) wb.createSheet("HPD"); Row row = ws.createRow(0); row.createCell(0).setCellValue("Value"); row = ws1.createRow(2); row.createCell(3).setCellValue("Address"); try { String path = "C:/Users/Jenny/Desktop/Test.xlsx"; FileOutputStream out = new FileOutputStream(path); wb.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } XSSFSheet ws3 = (XSSFSheet) wb.createSheet("another sheet"); try { String path = "C:/Users/Jenny/Desktop/Test.xlsx"; FileOutputStream out = new FileOutputStream(path); wb.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } 

}

很多人在尝试写入不止一次时面临这个问题。 这是 POI中的一个已知问题 。

不过,我build议你在第一次写入时使用fileinputstream尝试重新加载文件,并且需要重新加载对文件的访问。

 try { String path = "C:/Users/Jenny/Desktop/Test.xlsx"; FileOutputStream out = new FileOutputStream(path); wb.write(out); out.close(); wb = new XSSFWorkbook(new FileInputStream(path)); } catch (Exception e) { e.printStackTrace(); }