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();
}
}
}