1. 程式人生 > >java POI動態新增修改Excel,表頭是動態的。急啊

java POI動態新增修改Excel,表頭是動態的。急啊

java POI 首先讀取模板,修改新增資料,表頭是動態的, 要寫一個公共類,請教下大神。 /** * @param path 模板路徑 * @param esheet 表 * @param dataList 資料 * @return 結果集 * @throws IOException */ @SuppressWarnings(“all”) public static String writerExcel(String path, int esheet, List<?> dataList) throws Exception { // ClassPathResource resource = new ClassPathResource("/"); // String sysPath = “”; // try { // sysPath = resource.getURI().getPath(); // } catch (Exception e) { // e.printStackTrace(); // } // String templateFilePath = sysPath + “templates/採購辦.xls”; // System.out.println(“相對路徑”+templateFilePath ); //路徑 String pathType = path.substring(path.lastIndexOf(".")); Iterator it = (Iterator) dataList.iterator(); FileInputStream fileInputStream = new FileInputStream(path); //建立資料的輸入通道 POIFSFileSystem poifsFileSystem = new POIFSFileSystem(fileInputStream); //使用POI提供的方法得到excel的資訊 Workbook web = null; if (Excel_2003.equals(pathType)) { web = new HSSFWorkbook(poifsFileSystem);//得到文件物件 } else if (Excel_2007.equals(pathType)) { web = new XSSFWorkbook(fileInputStream);

    } else {
        throw new Exception("檔案格式有誤!!!");
    }

    Sheet sheet = web.getSheetAt(esheet);  //獲取sheet表
 
    Row dataRow = sheet.getRow(6);  //獲取第一行
    int row = dataRow.getRowNum() + 1;
    out.println("下一行的行號" + row);

    out.println(sheet.getLastRowNum() + " " + dataRow.getLastCellNum());  //分別得到最後一行的行號,和一條記錄的最後一個單元格
    out.println(sheet.getLastRowNum() + "總行數");
    out.println("每一行列數" + dataRow.getLastCellNum());

    int num = sheet.getLastRowNum() - 12;
    FileOutputStream out = new FileOutputStream(path);  //向.xls中寫資料 , 開啟流
    //插入需匯出的資料
    int k = 7;
    //迴圈每一行
    for (int i = 0; i < dataList.size(); i++) {
        dataRow = sheet.getRow(k++);
        System.out.println("每一行記錄" + dataList.get(i));

// //屬性名稱,對應的值 Map<String, Object> object = BeanCopyUtil.getAllPropertiesValue(dataList.get(i)); System.out.println(object.values()); System.out.println(object.keySet()); System.out.println(object.size()); Collection map = object.values(); for (String key : object.keySet()) { System.out.println(“k值:” + key + “value值” + object.get(key)); } dataList.get(i); List elist = new ArrayList(); elist.add(dataList.get(i));

        System.out.println(object);
        // 迴圈每一列

        for (int j = 0; j < dataRow.getLastCellNum(); j++) {
            System.out.println(object.values());

            dataRow.getCell(j).setCellValue(2);
            for(String key:object.keySet()){
                System.out.println("k值:"+key+"value值"+object.get(key));

                System.out.print("j==="+j);
                if(object.get(key) instanceof BigDecimal){

// dataRow.getCell(j).setCellValue(((BigDecimal) object.get(key)).doubleValue()); dataRow.getCell(j).setCellValue(“10”); System.out.println("((BigDecimal) object1).doubleValue()"+((BigDecimal) object.get(key)).doubleValue()); }else if(object.get(key) instanceof String){ dataRow.getCell(j).setCellValue(object.get(key).toString()); System.out.println("object1.toString()"+object.get(key).toString());

                }else{
                    dataRow.getCell(j).setCellValue(5);
                    System.out.println();
                }



            }

        }