按模板导出Excel

在项目需求中,经常会遇到导出Excel,一般没有模板的Excel很容易导出,那如果遇到格式很复杂的Excel怎么处理呢
例如下面这种:
在这里插入图片描述
我们使用 aspose很容易实现 需要jar包aspose-cells-8.5.2.jar

工具类

public class AsposeUtil {

    /**
     * @param head 单个对象,将对象作为此参数传入。如没有,传入null
     * @param list 多个对象时,将对象作为此参数传入。如没有,传入null
     * @param templateName 模板所在的位置,如:E:/template/studentTemplate.xlsx
     * @param resultFilePath 生成后的文件所存放的文件夹,如:E:/data/
     * @return 生成后的文件路径及文件名,如:E:/data/student.xlsx
     */
    public static <H> String exportExcelByAsposeWithTemplate(H head, List list, String templateName, String resultFilePath) {
        // 校验许可证
        if(!checkLicense()) {
            return null;
        }
        // 生成后文件名
        long time = System.currentTimeMillis();
        String resultFile = resultFilePath + File.separator + time + ".xlsx";
        try {
            // 加载模板
            Workbook wb = new Workbook(templateName);
            // 加载设计器
            WorkbookDesigner designer = new WorkbookDesigner();
            designer.setWorkbook(wb);
            // 单个对象和集合区分(在模板中定义方式不同)
            if(null != head) {
                designer.setDataSource("Head", head);
            }
            if(null != list) {
                designer.setDataSource("List", list);
            }
            designer.process();
            wb.save(resultFile);
            wb.dispose();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return time + ".xlsx";
    }

    /**
     * 校验Aspose的License
     */
    private static Boolean checkLicense() {
        try {
            InputStream license = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
            License aposeLic = new License();
            aposeLic.setLicense(license);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return License.isLicenseSet();
    }
}

controller

 @RequestMapping(value = {"/export"},method = {RequestMethod.POST})
 @ResponseBody
 public Object export(String transferFlow, HttpServletRequest request){
     if(StringUtil.isNotBlank(transferFlow)){
         SkillAssetTransferExt transferExt = assetTransferBiz.getAssetTransferExt(transferFlow);
         SkillAssetTransfer transfer = transferExt;
         List<SkillAssetTransferDetail> list = transferExt.getTransferDetailList();
         String path = request.getSession().getServletContext().getRealPath("/");
         String templateName = path +"upload"+ File.separator +"资产转移template.xlsx";
         String resultFilePath = InitConfig.getSysCfg("upload_base_dir");
         String resultFileName = AsposeUtil.exportExcelByAsposeWithTemplate(transfer, list, templateName, resultFilePath);
         assert null != resultFileName;
         String httpUrl = InitConfig.getSysCfg("upload_base_url");
         return ReusltData(httpUrl+"/"+resultFileName);
     }
     return ReusltDataThrow("数据异常");
 }

编辑模板
在这里插入图片描述
在这里插入图片描述
导出效果如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值