背景:在实现自动化测试时,执行完每一条excel测试用例后,需要更新该条用例的测试结果单元格中执行结果,于是在网上苦找方法,都是零碎案例,无法达到预期目的,又由于java功底一般,故自己琢磨写了一个简单的方法解决问题,相信网上大神众多,肯定有更好方式和方法,欢迎大神来拍砖指导。。
package common;
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.*;
/**
* User: XZee
* Date: 2011-10-10
* Time: 16:10:29
*/
public class write_excel {
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 错误信息 */
private static String errorInfo;
private static XSSFWorkbook workbook;
private static HSSFWorkbook workbook2;
/** 构造方法
* @return */
public int getTotalRows() {
return totalRows;
}
public int getTotalCells() {
return totalCells;
}
public String getErrorInfo() {
return errorInfo;
}
public static boolean validateExcel(String filePath) {
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (filePath == null|| !(isExcel2003(filePath) || isExcel2007(filePath))) {
errorInfo = "文件名不是excel格式";
return false;
}
/** 检查文件是否存在 */
File file = new File(filePath);
if (file == null || !file.exists()) {
errorInfo = "文件不存在";
return false;
}
return true;
}
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
}
public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}
/**
* 只是一个demo,这里假设修改的值是String类型
* @param filePath
* @param sheetIndex
* @param col
* @param row
* @param value
* @throws Exception
*/
public static void updateExcel(String filePath,int sheetIndex,int row,int col,String value)throws Exception{
/** 验证文件是否合法 */
if (!validateExcel(filePath)) {
System.out.println(errorInfo);
}
FileInputStream fis=new FileInputStream(filePath);
/** 判断文件的类型,是2003还是2007 */
if (isExcel2007(filePath)) {
workbook = new XSSFWorkbook(fis);
XSSFSheet sheet=workbook.getSheetAt(sheetIndex);
XSSFRow r=sheet.getRow(row);
XSSFCell cell=r.getCell(col);
String str=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str+"\n");
System.out.println("单元格值被更新为"+value+"\n");
fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(filePath);
workbook.write(fos);
fos.close();//关闭文件输出流
}else if(isExcel2003(filePath)){
workbook2 = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook2.getSheetAt(sheetIndex);
HSSFRow r = sheet.getRow(row);
HSSFCell cell = r.getCell(col);
String str=cell.getStringCellValue();
//这里假设对应单元格原来的类型也是String类型
cell.setCellValue(value);
System.out.println("单元格原来值为"+str);
System.out.println("单元格值被更新为"+value);
fis.close();//关闭文件输入流
FileOutputStream fos=new FileOutputStream(filePath);
workbook2.write(fos);
fos.close();//关闭文件输出流
}else{
System.out.println("当前文件,可能不是excel203或excel2007文件,请检查文件");
}
}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
File file=new File("E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx");
String file="E:\\workspace\\FE_performance_test\\Datasource\\TestCase.xlsx";
//下面尝试更改第一行第一列的单元格的值
write_excel.updateExcel(file,0,6,1,"2哥好腻害");
}