【java poi】向已存在的excel中追加數據

1.Maven依賴

<!-- POI依賴 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.0.0</version>
</dependency>

2、追加數據核心代碼

FileInputStream fs=new FileInputStream("E://Excel名字.xls");  //獲取d://test.xls
POIFSFileSystem ps=new POIFSFileSystem(fs);  //使用POI提供的方法得到excel的信息
HSSFWorkbook wb=new HSSFWorkbook(ps);
HSSFSheet sheet=wb.getSheetAt(0);  //獲取到工作表,因爲一個excel可能有多個工作表
HSSFRow row=sheet.getRow(0);  //獲取第一行(excel中的行默認從0開始,所以這就是爲什麼,一個excel必須有字段列頭),即,字段列頭,便於賦值
System.out.println(sheet.getLastRowNum()+" "+row.getLastCellNum());  //分別得到最後一行的行號,和一條記錄的最後一個單元格

FileOutputStream out=new FileOutputStream("E://Excel名字.xls");  //向d://test.xls中寫數據
row=sheet.createRow((short)(sheet.getLastRowNum()+1)); //在現有行號後追加數據
Calendar now = Calendar.getInstance();

//填充列數據,這裏是從左往右,依次填充數據,可以根據自己需求來填充,方法setCellValue()裏面的參數是我自己傳進來的,數據類型可以查看源碼
row.createCell(0).setCellValue( now.get(Calendar.YEAR)+"年"+(now.get(Calendar.MONTH) + 1)+"月"+(now.get(Calendar.DAY_OF_MONTH) - 1)+"日"); //設置第一個(從0開始)單元格的數據
row.createCell(1).setCellValue(StatusInformation); //設置第二個(從0開始)單元格的數據
row.createCell(2).setCellValue(CargoInformation); //設置第3個(從0開始)單元格的數據
row.createCell(3).setCellValue(FreightPush); //設置第4個(從0開始)單元格的數據
row.createCell(4).setCellValue(Integer.valueOf(materiel)); //設置第5個(從0開始)單元格的數據
row.createCell(5).setCellValue(StateOms); //設置第6個(從0開始)單元格的數據

out.flush();
wb.write(out);
out.close();
System.out.println(row.getPhysicalNumberOfCells()+" "+row.getLastCellNum());

3、可能遇到的bug

3.1、Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

原因:HSSFWorkbook只能處理擴展名爲.xls的文件,也就是excel2007以前的文件。

解決辦法:可以將.xlsx文件另存爲.xls文件再進行處理(不是直接改擴展名)。


3.2、org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0xC1EAC409FBC3D5D0, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document

原因:你直接改的擴展名…

解決辦法:如下圖:在這裏插入圖片描述


還有就是excel需要關閉。否則也會報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章