http://www.myexception.cn/j2ee/17951.html
修改文件最后还需要通过IO流操作来保存更改,这其实是很关键的一步,你代码里面没有IO的关闭操作,导致了数据的修改没有保存
------解决方案--------------------------------------------------------
修改的只是内存中的副本,还有自己主动写文件的,如
FileOutputStream stream;
stream = new FileOutputStream(new File(fileToBeRead ));
workbook.write(stream);
stream.close();
------解决方案--------------------------------------------------------
修改完cell的值 还需要保存一下excel
Java code
package poi.excel;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;
import java.io.*;
import java.util.Date;
import java.sql.Timestamp;
import java.text.DecimalFormat;
/**
* Created by IntelliJ IDEA.
* User: admin
* Date: 2011-10-10
* Time: 16:10:29
* To change this template use File | Settings | File Templates.
*/
public class UpdateExcel2003 {
/**
* 只是一个demo,这里假设修改的值是String类型
* @param exlFile
* @param sheetIndex
* @param col
* @param row
* @param value
* @throws Exception
*/
public static void updateExcel(File exlFile,int sheetIndex,int col,int row,String value)throws Exception{
FileInputStream fis=new FileInputStream(exlFile);
HSSFWorkbook workbook=new HSSFWorkbook(fis);
// workbook.
HSSFSheet sheet=workbook.getSheetAt(sheetIndex);
HSSFRow r=sheet.getRow(row);
HSSFCell cell=r.getCell(col);
// int type=cell.getCellType();
String str1=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str1);
System.out.println("单元格值被更新为"+value);
fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(exlFile);
workbook.write(fos);
fos.close();//关闭文件输出流
}
private String getCellValue(HSSFCell cell) {
String cellValue = "";
DecimalFormat df = new DecimalFormat("#");
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString().trim();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
cellValue = df.format(cell.getNumericCellValue()).toString();
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue()).trim();
break;
case XSSFCell.CELL_TYPE_FORMULA:
cellValue = cell.getCellFormula();
break;
default:
cellValue = "";
}
return cellValue;
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
// 下面改成你自己的xls文件进行测试,2003格式的,不能2007
File file=new File("resources/excel/stuInfo.xls");
//下面尝试更改第一行第一列的单元格的值
UpdateExcel2003.updateExcel(file,0,0,0,"更改测试");
}
}