easypoi 导出excel 和word文件

easypoi的简单导出 数据map导出

官方说明文档
http://easypoi.mydoc.io/
需要渲染的模版

image.png

语法

循环开始 {{$fe:maplist t.ho
循环中间参数 t.po
换行]]
循环结尾t.amount}}
统计循环数量{{sum:(t.amount)}}
单独参数{{totalQuantity}}

常见命令
• 空格分割
• 三目运算 {{test ? obj:obj2}} ps:{{QcNum == 0?image:null}}
• n: 表示 这个cell是数值类型 {{n:}} ps:{{n:packingNum}}
• le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
• fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
• fn: 格式化数字 {{fn:(obj;###.00)}}
• fe: 遍历数据,创建row
• !fe: 遍历数据不创建row
• $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
• #fe: 横向遍历
• v_fe: 横向遍历值
• !if: 删除当前列 {{!if:(test)}}
• 单引号表示常量值 '' 比如'1' 那么输出的就是 1
• &NULL& 空格
• ]] 换行符 多行遍历导出
• sum: 统计数据 {{sum:(t.amount)}}

maven

 <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>

过滤的应用场景


.png
@RequestMapping("exportExcel")
        @SuppressWarnings("unchecked")
        @RequiresPermissions("business:product:exportExcel")
        public R exportExcel(@RequestBody Map<String, Object> params,ModelMap model,HttpServletRequest request, HttpServletResponse response){
            List<ProductEntity> list=new ArrayList<ProductEntity>();//
            ExportParams param = new ExportParams("产品信息", "产品信息",ExcelType.XSSF);
            if(params.get("ids")!=null){
                list=productService.queryListByIds(params.get("ids"));
            }else{
                list=productService.queryListTwoThousand(params);
            }
            if(params.get("selected")!=null){
                 String[] s=params.get("selected").toString().split(",");//前端获取选中的栏目
                 List<String> lists =(List<String>) params.get("selected");
                 List<String> old = new ArrayList<String>();
                 ProductEntity  entity=new ProductEntity();
                 for (Field field : entity.getClass().getDeclaredFields()) {//去掉选中的栏目
                     if(!lists.contains(field.getName())){
                         old.add(field.getName()); 
                     }
                 }
                 s=  old.toArray(new String[1]);//list转数组
                 param.setExclusions(s);//过滤没有选中的栏目导出
            }
            Workbook workbook = ExcelExportUtil.exportExcel(param, ProductEntity.class,list);
            ByteArrayOutputStream fos;
            String url="";
            try {
                fos = new ByteArrayOutputStream();
                workbook.write(fos);
                url=OSSFactory.build().upload(fos.toByteArray(), OSSConfig.getALI_TEMP()+"excel/product_excel"+System.currentTimeMillis()+".xlsx");
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(url.length()>0){
                return R.ok().put("url", url).put("msg", "生成成功");
            }else{
                return R.error().put("msg", "生成失败");
            }
        }

这个是文件上传阿里云的 顺便过滤选中自己想导出不同栏目的,接下来看看实体类

package com.alpha.modules.product.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.hibernate.validator.constraints.NotBlank;

import cn.afterturn.easypoi.excel.annotation.Excel;

/**
 * 产品表-pt_product
 * 
 * @author Temple
 * @email
 * @date 2018-08-08 17:00:09
 */
public class ProductEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    // ID
    @NotBlank(message = "参数值不能为空")
    private Long id;

    // 产品名称
    @Excel(name = "产品名称", orderNum = "2", width = 20)
    private String name;

    // 产品编号
    @Excel(name = "产品编号", orderNum = "2", width = 20)
    private String code;

    // 样品类别代码
    private String typeCode;
    private String typeName;

    // 产品分类代码
    private Integer categoryId;
    @Excel(name = "产品类别", orderNum = "3", width = 10)
    private String categoryName;

    // 产品分类备注
    private String categoryNote;

    // 主题代码
    private String themeCode;
    @Excel(name = "产品主题", orderNum = "4", width = 10)
    private String themeName;

    // 供应商代码
    @Excel(name = "工厂代码", orderNum = "6", width = 10)
    private String factoryCode;
    // 供应商名称
    @Excel(name = "工厂名称", orderNum = "5", width = 30)
    private String factoryName;

    // 产品报价
    @Excel(name = "工厂报价", orderNum = "7", width = 10)
    private Double price;

    // 报价币种
    @Excel(name = "币种", orderNum = "8", width = 10)
    private String currency;

    // 单位
    @Excel(name = "单位", orderNum = "9", width = 10)
    private String unit;

    // 开发人用户名
    @Excel(name = "开发人", orderNum = "10", width = 15)
    private String developUser;

    // 设计人用户名
    @Excel(name = "设计人", orderNum = "11", width = 15)
    private String designUser;

    // 产品材质
    @Excel(name = "产品材质", orderNum = "12", width = 15)
    private String material;

    // 工厂货号
    @Excel(name = "工厂货号", orderNum = "13", width = 15)
    private String factoryNo;

    // 产品描述
    @Excel(name = "产品描述", orderNum = "14", width = 35)
    private String descNote;

    // 图片加密:0不加密,1加密
    private Integer encrypt;

    // 上传时间
    @Excel(name = "录入时间", orderNum = "15", width = 20,exportFormat="yyyy-MM-dd")
    private Date ctime;

    // 图片url
    @Excel(name = "产品图片", orderNum = "1", imageType = 1, type = 2, width = 35, height = 49)
    private String picUrl;

    // 上传操作员
    @Excel(name = "录入人员", orderNum = "16", width = 15)
    private String cuser;

    // 唛头
    private String mark;

    // 状态:0禁用,1开启 默认:0
    private Integer state;
    // 图片样式
    private String picStyle;

    private Integer isSuit;
    private String suitCode;

    private String fingerprint;// 指纹信息

    private List<Map<String, Object>> suitList;

    // 产品类型:0主料,1辅料
    private Integer proType;
    
    private String customerCode;
    
    private String topCategory;
    
    private int serialNum;//序列号
    
    private int filialeId;
}

用注解 包括日期格式 数字替换文字等

    @Excel(name = "录入时间", orderNum = "15", width = 20,exportFormat="yyyy-MM-dd")
//时间格式
@Excel(name = "产品图片", orderNum = "1", imageType = 1, type = 2, width = 35, height = 49)
//图片
//数字替换成文字
@Excel(name = "发票状态", orderNum = "1",replace = { "未推送_0", "已推送_1" }, width = 20)

map封装导出比较类似

image.png

实体类导出excel 简单导出

@RequestMapping("/exportPackingReportExcel")
    public void exportPackingReportExcel(ModelMap model, @RequestParam Map<String, Object> param,
            HttpServletRequest request, HttpServletResponse response) {

        ExportParams params = new ExportParams(null, "装箱单报表", ExcelType.XSSF);
        List<PackingReportCostEntity> dataList =packing.exportPackingReportExcel(param);
        model.put(NormalExcelConstants.DATA_LIST, dataList);
        model.put(BigExcelConstants.CLASS, PackingReportCostEntity.class);
        model.put(BigExcelConstants.PARAMS, params);
        model.put(MapExcelConstants.FILE_NAME, "装箱单报表");
        PoiViewUtil.render(model, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);
    }

js文件

//参数等  这个是最简单的导出
window.location.href="/"+T.moduleName+"/packingReport/exportPackingReportExcel?"

导出复杂的word待续。。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容