1. 程式人生 > >根據模板生成帶公式的excel

根據模板生成帶公式的excel

將模板(帶公式計算)放在專案路徑下某個資料夾

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