我正在尝试编写一个代码,将数据附加到现有的Excel电子表格中。但是,当我运行此代码时,文件已损坏。
在这个代码的情况下,我试图添加一个电子表格,但我尝试使用现有工作表中的单元格,没有luch和所有相同的错误。我错过了什么,看起来我正在创建一个Excel添加一些数据然后写,关闭它。然后只需将新工作表添加到现有工作簿并再次将其写入流。
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();
}
}
}
答案 0 :(得分:1)
许多人在尝试不止一次写作时都面临着这个问题。 POI中This is a known issue。
但是我建议您在第一次写入时尝试使用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();
}