如何在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
for (int j =
0
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
for (int j =
0
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之前的,现在大家安装的应该最低都是07或13的吧。
所以又换了一种方法:
使用apache的poi对表格进行操作:
File f =
new File(
"C:\\Users\\Documents\\abc.xls");
InputStream inputStream =
new FileInputStream(f);
HSSFWorkbook xssfWorkbook =
new HSSFWorkbook(inputStream);
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