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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值