easypoi模板导出设置单元格格式为公式

封装设置单元格格式为公式的方法
 /**
     *
     *   公式处理
     * @param workbook
     * @param s
     * @param rowIndex  数据起始行
     * @param cellStartIndex  
     * @param cellEndIndex      本人涉及的表格格式有多个连续一样的  所以用cellStartIndex, 
                                cellEndIndex批量定位单元格位置
     */
    public static void updateFormula(Workbook workbook, Sheet s, int rowIndex,int cellStartIndex,int cellEndIndex){
        FormulaEvaluator eval=null;
        if(workbook instanceof HSSFWorkbook)
            eval=new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
        else if(workbook instanceof XSSFWorkbook)
            eval=new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
        //获得当前sheet的开始行
        int firstRowNum  = s.getFirstRowNum();
        int lastRowNum = s.getLastRowNum();
        //循环row    
        for(int rowNum = firstRowNum + rowIndex;rowNum <= lastRowNum;rowNum++){
            //获得当前行
            Row row = s.getRow(rowNum);
            //找到指定单元格
            for (int c = row.getFirstCellNum() + cellStartIndex; c < cellEndIndex; c++) {
                Cell cell = row.getCell(c);
                if(cell != null){
                    //设置格式为公式
                    cell.setCellFormula(cell.getStringCellValue());
                    eval.evaluateFormulaCell(cell);
                }
            }
        }
    }
遍历设置各个sheet中每row为公式的单元格格式
/**
     * 单元格格式化成公式
      * @param workbook
     * @return
     */
   public Workbook xssfFormulaEvaluator(Workbook workbook){

       if(workbook != null){
           for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
               Sheet sheetAt = workbook.getSheetAt(sheetNum);
               if (sheetNum == 0){
                   updateFormula(workbook,sheetAt,2,1,18);
               }
              .......其余sheet页详细代码省略,按需设置
           }
       }
       workbook.setForceFormulaRecalculation(true);// 重新计算公式的意思
       return  workbook;
   }

坑:因为导出模板需要多加一列,导致导入数据库的公式和导出的excel表字段列不一致,也因此导致公式不能计算,例如:导入a字段对应A1,结果导出在前面多加了一列,a字段对应为了B1,

希望下次自己长记性,不要犯这种低级错误,加油

解决:将导出多出来的字段加到sheet最后一列即可

注:仅供记录学习,能帮到大家更好,本人小白,各位大牛多多指点,轻喷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值