java 通過poi修改excel數據的實例網上一大把,但是用的時候卻可能遇到問題,我把我經過測試,成功的代碼分享給大家,也給自己做一個記錄,留着以后用。
本實例是操作excel2010的程序
代碼如下:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * 將aaa文件中的所有Study Subject ID開頭的換成 “研究主題”,Protocol ID開頭的換成“協議”。這個可以自己修改,根據需求不同靈活變化 * @author sun * */ public class WriteExcelPOI { public void writeExcelPOI() { try { String fileName = "D:\\aaa.xlsx"; //修改d盤的aaa.xlsx文件 XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(fileName)); Map<String, String> fields = new HashMap<String, String>(); fields = getFieldMap(); //獲取要修改字段的集合 String fillStr=""; //存儲aaa文件里的數據 String[] fillSplit=null; XSSFSheet xSheet = xwb.getSheetAt(0); //獲取excel表的第一個sheet for (int i = 0; i <= xSheet.getLastRowNum(); i++) { //遍歷所有的行 if(xSheet.getRow(i)==null){ //這行為空執行下次循環 continue; } for (int j = 0; j <= xSheet.getRow(i).getPhysicalNumberOfCells(); j++) { //遍歷當前行的所有列 if(xSheet.getRow(i).getCell(j)==null){//為空執行下次循環 // System.out.println("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); continue; } fillStr = (xSheet.getRow(i)).getCell(j).toString();//獲取當前單元格的數據 fillSplit=fillStr.split("_");//切割,本人的數據是以"_"為分隔符的這個可以根據自己情況改變 // XSSFRow xRow = xSheet.createRow(i); // XSSFCell xCell = xRow.createCell(j); XSSFCell xCell=xSheet.getRow(i).getCell(j); //獲取單元格對象,這塊不能向上邊那兩句代碼那么寫,不能用createXXX,用的話會只把第一列的數據改掉 xCell.setCellValue(fields.get(fillSplit[0].trim())==null?fillStr:fields.get(fillSplit[0].trim()));//修改數據,看數據是否和字段集合中的數據匹配,不匹配使用元數據 // System.out.println(fields.get(fillSplit[0].trim())); } } FileOutputStream out = new FileOutputStream(fileName); xwb.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } private String getValue(XSSFCell xCell) { if (xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) { return String.valueOf(xCell.getBooleanCellValue()); } else if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { return String.valueOf(xCell.getNumericCellValue()); } else { return String.valueOf(xCell.getStringCellValue()); } } private Map<String, String> getFieldMap(){ Map<String, String> fields = new HashMap<String, String>(); fields.put("Study Subject ID", "研究主題"); fields.put("Protocol ID", "協議"); // try{ // String fileName = "D:\\yuan.xlsx"; // XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(fileName)); // // XSSFSheet xSheet = xwb.getSheetAt(3); // for (int i = 0; i <= xSheet.getLastRowNum(); i++) { // fields.put(xSheet.getRow(i).getCell(0).toString(),xSheet.getRow(i).getCell(1).toString()); //// System.out.println("---"+xSheet.getRow(i).getCell(0)+"*---"+fields.get("A1")); // } // } // catch(Exception e){ // e.printStackTrace(); // } return fields; } public static void main(String[] args) { WriteExcelPOI a = new WriteExcelPOI(); a.writeExcelPOI(); } }
使用的jar包在: http://download.csdn.net/detail/gaizhongfeng/8535377
有什么問題歡迎指出,也可以加我的qq: 212966054