• 6、jeecg 笔记之 自定义excel 模板导出(一)


    1、前言

    jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求,

    但总是有需要用到自定义 excel 导出模板,下文所用到的皆是 easypoi 提供的,为方便下次翻阅,故记之。

    2、代码部分

    2.1、controller

        @RequestMapping("/myExcel")
        public void myExcel(JeecgDemoExcelEntity jeecgDemoExcel, HttpServletRequest request, HttpServletResponse response)
                throws IOException {
            TemplateExportParams params = new TemplateExportParams(
                    request.getServletContext().getRealPath("/") + "export/template/exportMyExcel.xls");
            params.setHeadingStartRow(3);
            params.setHeadingRows(2);
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("date", "2014-12-25");
            map.put("money", 2000000.00);
            map.put("upperMoney", "贰佰万");
            map.put("company", "执笔潜行科技有限公司");
            map.put("bureau", "财政局");
            map.put("person", "JueYue");
            map.put("phone", "1879740****");
    
            List<TemplateExcelExportEntity> list = new ArrayList<TemplateExcelExportEntity>();
    
            for (int i = 0; i < 4; i++) {
                TemplateExcelExportEntity entity = new TemplateExcelExportEntity();
                entity.setIndex(i + 1 + "");
                entity.setAccountType("开源项目");
                entity.setProjectName("EasyPoi " + i + "");
                entity.setAmountApplied(i * 10000 + "");
                entity.setApprovedAmount((i + 1) * 10000 - 100 + "");
                List<BudgetAccountsEntity> budgetAccounts = Lists.newArrayList();
                for (int j = 0; j < 1; j++) {
                    BudgetAccountsEntity accountsEntity = new BudgetAccountsEntity();
                    accountsEntity.setCode("A001");
                    accountsEntity.setName("设计");
                    budgetAccounts.add(accountsEntity);
                    accountsEntity = new BudgetAccountsEntity();
                    accountsEntity.setCode("A002");
                    accountsEntity.setName("开发");
                    budgetAccounts.add(accountsEntity);
                }
                entity.setBudgetAccounts(budgetAccounts);
                PayeeEntity payeeEntity = new PayeeEntity();
                payeeEntity.setBankAccount("6222 0000 1234 1234");
                payeeEntity.setBankName("中国银行");
                payeeEntity.setName("小明");
                entity.setPayee(payeeEntity);
                list.add(entity);
            }
    
            Workbook workbook = ExcelExportUtil.exportExcel(params, TemplateExcelExportEntity.class, list, map);
            File savefile = new File("D:/excel/");
            if (!savefile.exists()) {
                savefile.mkdirs();
            }
            FileOutputStream fos = new FileOutputStream("D:/excel/专项支出用款申请书.xls");
            workbook.write(fos);
            fos.close();
        }

    2.2、entity 实体类

    TemplateExcelExportEntity.class

    public class TemplateExcelExportEntity implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @Excel(name = "序号")
        private String index;
    
        @Excel(name = "资金性质")
        private String accountType;
    
        @ExcelCollection(name = "预算科目")
        private List<BudgetAccountsEntity> budgetAccounts;
    
        @Excel(name = "项目名称")
        private String projectName;
    
        @ExcelEntity(name = "收款人")
        private PayeeEntity payee;
    
        @Excel(name = "申请金额")
        private String amountApplied;
    
        @Excel(name = "核定金额")
        private String approvedAmount;
      
       get set ...
    }

    BudgetAccountsEntity.class(预算)

    public class BudgetAccountsEntity {
    
        @Excel(name = "编码")
        private String code;
    
        @Excel(name = "名称")
        private String name;
        get set ...
     }

    PayeeEntity.class(收款人)

    public class PayeeEntity {
    
        @Excel(name = "全称")
        private String name;
    
        @Excel(name = "银行账号")
        private String bankAccount;
    
        @Excel(name = "开户银行")
        private String bankName;
    
        get set ...
    
    }

    2.3、导出工具类 ExcelExportUtil.class

    public final class ExcelExportUtil {
    
        private ExcelExportUtil() {
        }
    
        /**
         * @param entity
         *            表格标题属性
         * @param pojoClass
         *            Excel对象Class
         * @param dataSet
         *            Excel对象数据List
         */
        public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) {
            Workbook workbook;
            if (ExcelType.HSSF.equals(entity.getType())) {
                workbook = new HSSFWorkbook();
            } else if (dataSet.size() < 1000) {
                workbook = new XSSFWorkbook();
            } else {
                workbook = new SXSSFWorkbook();
            }
            new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet);
            return workbook;
        }
    
        /**
         * 根据Map创建对应的Excel
         * 
         * @param entity
         *            表格标题属性
         * @param pojoClass
         *            Excel对象Class
         * @param dataSet
         *            Excel对象数据List
         */
        public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, Collection<? extends Map<?, ?>> dataSet) {
            Workbook workbook;
            if (ExcelType.HSSF.equals(entity.getType())) {
                workbook = new HSSFWorkbook();
            } else if (dataSet.size() < 1000) {
                workbook = new XSSFWorkbook();
            } else {
                workbook = new SXSSFWorkbook();
            }
            new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet);
            return workbook;
        }
    
        /**
         * 一个excel 创建多个sheet
         * 
         * @param list
         *            多个Map key title 对应表格Title key entity 对应表格对应实体 key data
         *            Collection 数据
         * @return
         */
        public static Workbook exportExcel(List<Map<String, Object>> list, String type) {
            Workbook workbook;
            if (ExcelType.HSSF.equals(type)) {
                workbook = new HSSFWorkbook();
            } else {
                workbook = new XSSFWorkbook();
            }
            for (Map<String, Object> map : list) {
                ExcelExportServer server = new ExcelExportServer();
                server.createSheet(workbook, (ExportParams) map.get("title"), (Class<?>) map.get("entity"), (Collection<?>) map.get("data"));
            }
            return workbook;
        }
    
        /**
         * 导出文件通过模板解析,不推荐这个了,推荐全部通过模板来执行处理
         * 
         * @param params
         *            导出参数类
         * @param pojoClass
         *            对应实体
         * @param dataSet
         *            实体集合
         * @param map
         *            模板集合
         * @return
         */
        public static Workbook exportExcel(TemplateExportParams params, Class<?> pojoClass, Collection<?> dataSet, Map<String, Object> map) {
            return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, pojoClass, dataSet, map);
        }
    
        /**
         * 导出文件通过模板解析只有模板,没有集合
         * 
         * @param params
         *            导出参数类
         * @param map
         *            模板集合
         * @return
         */
        public static Workbook exportExcel(TemplateExportParams params, Map<String, Object> map) {
            return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, null, null, map);
        }
    
    }

    2.4、excel 模板

    需要用到的模板 exportMyExcel.xls

    https://files.cnblogs.com/files/niceyoo/exportMyExcel.rar

     

    2.5、调用地址

    http://localhost:8080/项目名/XxxController/myExcel.do

    2.6、效果图

    博客地址:http://www.cnblogs.com/niceyoo

  • 相关阅读:
    嵌入式Linux基础知识
    面向对象程序设计与原则
    设计模式之工厂模式
    设计模式之单例模式
    基于Doxygen的C/C++注释原则
    设计模式概论
    重启博客
    java 单例模式的几种写法
    CountDownLatch、CyclicBarrier
    java ConcurrentHashMap和CopyOnWriteArrayList解决并发问题
  • 原文地址:https://www.cnblogs.com/niceyoo/p/10130923.html
Copyright © 2020-2023  润新知