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

摘要:
1.在前言中,JEECG有自己的Excel导出功能,它使用easypoi。尽管导出的Excel可以满足大多数要求,但始终需要使用用户定义的Excel导出模板。以下所有内容均由easypoi提供。为了便于下次复习,请记住这一点。

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

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

2.5、调用地址

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

2.6、效果图

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

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

免责声明:文章转载自《6、jeecg 笔记之 自定义excel 模板导出(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用Flyway来管理数据库版本如何在网页标题栏title加入icon图标?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android中关于日期时间与时区的使用总结

原文引自:http://www.2cto.com/kf/201312/266908.html 在开发Android的过程中,出现过几次由于日期时间导致的问题,而且主要是由于时区的原因导致,所以一直想总结一下,形成一个良好的开发规范。 一、Unix时间戳 Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(...

JsonPath

JsonPath 在xml的使用过程中,对于xml的解析我们知道可以使用xpath的方式,随意的获取到我们想要的属性值。那么在使用json时,我们能不能实现同样的操作呢? 答案就是 json-path 基础介绍 跟 XPath 类似,JsonPath 通过路径来检索JSON,对语法格式如下 语法 符号 描述 $ 表示json的根节点,表示根节点下...

java 添加properties文件读写

import java.io.InputStream; import java.util.Properties; /** * @author guoxiang * */ public class Config { private static Config instance = null; private Propert...

Android编程获取手机型号,本机*,sdk版本号及firmware版本号号(即系统版本号号)

Android开发平台中,可通过TelephonyManager 获取本机号码。 TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); txtPhoneNumber.setText(phoneMgr.getLine1Num...

JAVA获取文件本身所在的磁盘位置

我们在做java开发(纯java程序,或者java web开发)时,经常会遇到需要读取配置文件的需求,如果我们将文件所在位置的信息直接写到程序中,例如:E:\workspace\JavaGUI\bin\com\util这个目录,这样虽然可行,但是,却产生了很大的局限性,因为读取的文件必须要要满足在E:\workspace\JavaGUI\bin\com\u...

es版本2.x的string和5.x的keyword,text的区别和联系

一 es2.x和es5.x版本定义字符串类型 2.x版本的es string的类型 全文检索   分词   index=analysis  按单个字符匹配    被称作analyzed字符串 关键词搜索 不分词  index=not_analysis  按照整个文本进行匹配  被称为not-analyzed字符串 index=no  表示不被索引,产生的后...