java中修改Excel表格內容

如何在java中修改.xls或.xlsx表格中的內容呢?朋友需要幫忙學習了一下,需求其實很簡單,有很多表格文件,需要將其中一部分的數據進行修改並保存到源文件。

這裏寫圖片描述

看到這樣的需求,肯定大多數人第一時間想到的就是“查找替換”,但如果這個文件有成百上千個呢?如果你能找到成百上千個人幫你查找替換,那我就呵呵了,表示你已成仙,不需要看鄙人的博文了。

下面說一下我的思路,剛開始用到了jxl這個jar包中的方法,寫了一種方法:

File f = new File("C:\\Users\\Documents\\abc.xls");
try {
Workbook wb = Workbook.getWorkbook(f);//
WritableWorkbook book = wb.createWorkbook(f, wb);
// Sheet sheet = wb.getSheet(0); // 獲得第一個工作表對象
WritableSheet st = book.getSheet(0);
for (int i = 0; i < st.getRows(); i++) {
  for (int j = 0; j < st.getColumns(); j++) {
       Cell cell = st.getCell(j, i); // 獲得單元格
       System.out.print(cell.getContents() + " ");
  }
   System.out.print("\n");
}
book.write();
book.close();
wb.close();
} catch (Exception e) {
e.printStackTrace();
}

如果要修改單元格中的內容可以這樣:

File f = new File("C:\\Users\\Documents\\abc.xls");
try {
Workbook wb = Workbook.getWorkbook(f);//
WritableWorkbook book = wb.createWorkbook(f, wb);
// Sheet sheet = wb.getSheet(0); // 獲得第一個工作表對象
WritableSheet st = book.getSheet(0);
for (int i = 0; i < st.getRows(); i++) {
   for (int j = 0; j < st.getColumns(); j++) {
    Cell cel = st.getCell(j,i);
    if(cel.getType() == CellType.LABEL){
        Label label = new Label(j, i, "Yes");
        // Yes 是需要填充單元格的內容
        st.addCell(label);
    }
    }
}
book.write();
book.close();
wb.close();
} catch (Exception e) {
    e.printStackTrace();
}

這樣發現雖然數據修改了,卻會有一個問題,在打開修改後的文件會提示數據不完整,雖然也可以正常使用,但總是這樣提示,像我這樣追求完美的人豈能忍受,找了一下原因,原來是和office的版本有關,使用jxl的包支持的office的版本是03之前的,現在大家安裝的應該最低都是0713的吧。

所以又換了一種方法:

使用apache的poi對錶格進行操作:

File f = new File("C:\\Users\\Documents\\abc.xls");
InputStream inputStream = new FileInputStream(f);
HSSFWorkbook xssfWorkbook = new HSSFWorkbook(inputStream);
//  XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); //如果是.xlsx文件使用這個
HSSFSheet sheet1 = xssfWorkbook.getSheetAt(0);
for(Row row : sheet1){
for(Cell hssfCell : row){
    if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
     } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
        hssfCell.setCellValue("nihao");
     } else if(hssfCell.getCellType() == Cell.CELL_TYPE_STRING){
        String str = hssfCell.getStringCellValue();
        if(str.equals("Fail")){
            hssfCell.setCellValue("Yes");
        }
        else if(str.equals("Block")){
            hssfCell.setCellValue("NA");
        }else if(str.equals("Warn")){
            hssfCell.setCellValue("NO");
        }

     }
     }
}

注意這裏一定要判斷單元格內容的類型,否則會報錯

如果需要對某個文件夾下的所有文件進行操作怎麼辦?

也簡單,對文件夾下的文件進行遍歷讀取修改即可:

File ff = new File("C:/Users/Documents");
File[] files = ff.listFiles();
...
for()
...
...

好了,這次就總結到這裏,如果後續還有別的需求會即時更新的。

相關jar包: http://pan.baidu.com/s/1mi12mk4

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