zoukankan      html  css  js  c++  java
  • Java修改excel内容

    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

  • 相关阅读:
    SVN服务器搭建和使用(一)
    log4j.properties配置详解
    List<Map>来导出Excel数据
    JavaFX 表格数据显示简单Demo
    Java数组
    oracle数据 在已有的重复的数据上加联合唯一约束
    MyEclipse 9极速优化
    Eclipse中自定义Library
    Python 爬虫 1 (转)
    装修步骤 1
  • 原文地址:https://www.cnblogs.com/gaizhongfeng/p/4462938.html
Copyright © 2011-2022 走看看