根據模板生成帶公式的excel
阿新 • • 發佈:2018-11-21
將模板(帶公式計算)放在專案路徑下某個資料夾
//1.生成工資表excel檔案 FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream(request.getServletContext().getRealPath("static/template/工資條模板.xlsx")); } catch (FileNotFoundException e) { e.printStackTrace(); throw new MyException("找不到工資條模板.xlsx檔案"); } XSSFWorkbook excel = null; try { excel = new XSSFWorkbook(fileInputStream); } catch (Exception e) { e.printStackTrace(); throw new MyException("讀取檔案出錯"); } XSSFSheet sheet = excel.getSheetAt(0); //獲取模板中的標題 String title = sheet.getRow(0).getCell(0).getStringCellValue(); //獲取模板中的列名 String[] rowValue1 = new String[18]; String[] rowValue2 = new String[3]; for (int i = 0; i< sheet.getRow(1).getPhysicalNumberOfCells() ; i++) { if(13 == i && 14 == i) { continue; } rowValue1[i] = sheet.getRow(1).getCell(i).getStringCellValue(); } rowValue2[0] = sheet.getRow(2).getCell(12 ).getStringCellValue(); rowValue2[1] = sheet.getRow(2).getCell(13 ).getStringCellValue(); rowValue2[2] = sheet.getRow(2).getCell(14 ).getStringCellValue(); String webAppPath = request.getSession().getServletContext().getRealPath("/"); String uploadfilePath = webAppPath+"\\static\\temp"; File uploadfile = new File(uploadfilePath); //判斷資料夾是否存在,如果不存在則建立資料夾 if (!uploadfile.exists()) {//先建立temp資料夾 uploadfile.mkdir(); } FileOutputStream fos = null; try { fos = new FileOutputStream(uploadfilePath + "\\" + p.getPersonName() + "工資表.xlsx"); //建立excel Workbook workbook = new XSSFWorkbook(); //讀取個人工資條模板檔案,將模板複製到新建excel檔案 String filePath = webAppPath + "\\static\\template\\個人工資條模板.xlsx"; FileInputStream tps = new FileInputStream(new File(filePath)); XSSFWorkbook tpWorkbook = new XSSFWorkbook(tps); workbook = tpWorkbook; //建立sheet--子工作表 Sheet sheetTemp = workbook.getSheetAt(0); //設定公式自動計算 sheetTemp.setForceFormulaRecalculation(true); //設定標題 sheetTemp.getRow(0).getCell(0).setCellValue(title); //設定列名 for (int i = 0; i< 18 ; i++) { if(13 == i && 14 == i) { continue; } sheetTemp.getRow(1).getCell(i).setCellValue(rowValue1[i]); } sheetTemp.getRow(2).getCell(12).setCellValue(rowValue2[0]); sheetTemp.getRow(2).getCell(13).setCellValue(rowValue2[1]); sheetTemp.getRow(2).getCell(14).setCellValue(rowValue2[2]); //設定個人工資明細 sheetTemp.getRow(3).getCell(0).setCellValue(1); sheetTemp.getRow(3).getCell(1).setCellValue(salarySchedule.getStaffName()); sheetTemp.getRow(3).getCell(2).setCellValue(salarySchedule.getFinanAccountUnit()); sheetTemp.getRow(3).getCell(3).setCellValue(salarySchedule.getBasePay()); sheetTemp.getRow(3).getCell(4).setCellValue(salarySchedule.getPostWage()); sheetTemp.getRow(3).getCell(5).setCellValue(salarySchedule.getAchievementBonus()); sheetTemp.getRow(3).getCell(6).setCellValue(salarySchedule.getMealSupplement()); sheetTemp.getRow(3).getCell(7).setCellValue(salarySchedule.getOtherWelfareCosts()); sheetTemp.getRow(3).getCell(8).setCellValue(salarySchedule.getPerformanceDeductions()); sheetTemp.getRow(3).getCell(9).setCellValue(salarySchedule.getDeductionsAttend()); sheetTemp.getRow(3).getCell(11).setCellValue(salarySchedule.getHousingStock()); sheetTemp.getRow(3).getCell(12).setCellValue(salarySchedule.getPension()); sheetTemp.getRow(3).getCell(13).setCellValue(salarySchedule.getMedicalCare()); sheetTemp.getRow(3).getCell(14).setCellValue(salarySchedule.getUnemployment()); workbook.write(fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }