excel模板方式导出

整理下excel模板方式的导出方法;工具类用的easyexcel;
步骤:1、制作好模板文件。
2、获取模板文件
3、填充模板
在这里插入图片描述
分为主数据和明细数据
主数据数据类型可以为对象,可以为map<string,string>;
明细数据类型是list<对象>,可以为list<map<string,string>>
明细的模板要的前缀要与代码里的填充key一致

/**
* @param data         数据 map集合类型 key:头数据可以固定为"head",明细数据map(string,list) ,参数:填充信息、文件名、模板code
* @param title        文件名
* @param templateCode 模板文件
* @return file 创建的文件
*/
public File createSingleSheetExcelByTempLate(Map<String, Object> data, String title, String templateCode) {
        // 获取模板文件 根据模板所在位置,自己写获取模板文件的方法
       // resource文件夹下的方法是File file = ResourceUtils.getFile("classpath:cityInfo.json")
        AdapterBean bean = adapterBeanFactory.getAdapterBeanIgNull(templateCode, null);
        String tmpFile = bean.getTmpFile();
        Document document = adapterContent.getDocumentService().get(tmpFile.substring(tmpFile.indexOf("=") + 1));
        // 临时文件名
        String fileName = title + ".xlsx";
        // 创建临时文件
        File tempFile = CommonUtil.createTempFile(fileName);
        try {
            // 生成文件
            InputStream inputStream = document.getInputStreamSupplier().get();
            // easyexcel的模板填充 withTemplate方法可以传file对象,也可传文件路径字符串,可以传文件流
            ExcelWriter excelWriter = EasyExcel.write(tempFile).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            // 循环遍历明细list 有可能有多个明细,用不同的key区分
            for (Map.Entry<String, Object> orderData : data.entrySet()) {
                String key = orderData.getKey();
                // 排除掉head主数据
                if ("head".equals(key)) {
                    continue;
                }
                List<Map<String, Object>> value = (List<Map<String, Object>>) orderData.getValue();
                // 填充数据,key要与模板里的明细的前缀一致
                excelWriter.fill(new FillWrapper(key, value), writeSheet);
            }
            // 判断是否存在着head主数据
            if (data.get("head") != null) {
            	// 填充主数据
                excelWriter.fill(data.get("head"), writeSheet);
            }
            excelWriter.finish();
        } catch (IOException e) {
            logger.error(e.getMessage());
            throw new RuntimeException(e);
        }
        return tempFile;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值