使用EasyPoi实现Excel的按模板样式导出

1,横向遍历

#fe

使用#fe命令可以实现集合数据的横向拓展,比如模板代码是

{{#fe:maths t.score}}

导出的excel里面就会显示会自当前列,向右拓展,效果可参见下面的导出文件截图

2,横向遍历值

v_fe

使用v_fe命令可以实现不固定列的横向遍历,比如模板代码是

分数 ID
{{#fe:maths t.score t.id}}

这种情况导出的excel就会两列一起向右拓展,效果可参见下面的导出文件截图

3,删除行

方法一:删除空白行

book.getSheetAt(0).removeRow(book.getSheetAt(0).getRow(12))

只是清空第13行内容,行还在

方法二:这行高度设为0

book.getSheetAt(0).getRow(12).setHeight((short)0);

推荐此方法,打印出来的效果就是看不到这行,对于打印功能来说足够了

方法三:shiftRows 删除后下方单元格上移

 book.getSheetAt(0).shiftRows(12,book.getSheetAt(0).getLastRowNum(),5);

api说明

 sheet.shiftRows(startRow,endRow,shiftCount)

参数说明:
startRow:移动的开始行号,从0开始计算, 如果想要删除Excel中的第8行(rownum=7),那么starRow设定为7,即设定为你想删除的那行
endRow: 移动的结束行号,从0开始计算。通过startRow和endRow选定移动的范围。可以用sheet.getLastRowNum:来取得sheet的结尾行号 shiftCount 移动多少行。正数是往下移动的行数,负数是往上移动的行数
这个方法也不能实现真正的删除行

4,日期格式

{{fd:(report_date;yyyy-MM-dd)}}

report_date就是new Date()
通过这个模板命令可以直接转换成想要的日期格式

5,保留几位小数

模板命令

{{#fe:chineses {{fn:(t.score;###.00)}}}}

两个0代表保留两位小数
如果是在sql中处理,那么可以使用round函数,记住一定要加别名

select round(score,2) scoreValue from table

如果是在代码中

String.format("%.2f",(double)(i+70)).toString()

详细代码


def main(){
        Map<String,Object> map = new HashMap()
        map.put("class_code","GRADE1")
        map.put("model","初三")
        map.put("report_date",new Date())
        map.put("sample_num",30)
        map.put("chinese_standard_value",90)
        map.put("math_standard_value",80)
        // 数学测试数据
        def res = []
        for(int i=0;i<20;i++){
            def data = ["id":i,"score":String.format("%.2f",(double)(i+70)).toString()]
            res.add(data)
        }
        map.put("maths",res.subList(0,8))
        map.put("maths"+"2",res.subList(8,16))
        map.put("maths"+"3",res.subList(16,res.size()))
        // 语文测试数据
        def res2 = []
        for(int i=0;i<20;i++){
            def data = ["id":i,"hello":i+"Hello","score":(i+80.2589).toString()]
            res2.add(data)
        }
        map.put("chineses",res2.subList(0,8))
        map.put("chineses"+"2",res2.subList(8,16))
        map.put("chineses"+"3",res2.subList(16,res2.size()))
        // return map
        def filePrefix = new Date().format("yyyyMMddHHmmss")

        def file = resFileGetter.getByName('1690342020350导出测试.xlsx');
        def templateUrl = file.getAbsolutePath();
        String sheetName = "班级成绩报告";
        TemplateExportParams params = excelApi.buildTmpExportParams(templateUrl,sheetName)
        params.setColForEach(true);
        def book = ExcelExportUtil.exportExcel(params, map);
        def fileName =  "班级成绩报告"+filePrefix+".xlsx"
        ExcelUtils.downLoadExcel(fileName, response, book);
}

模板文件

1690342020350导出测试.xlsx
使用EasyPoi实现Excel的按模板样式导出_第1张图片

导出文件

如下
使用EasyPoi实现Excel的按模板样式导出_第2张图片

你可能感兴趣的:(后端,excel,前端,数据库,easypoi,横向遍历)