easypoi 導(dǎo)出excel 和word文件

easypoi的簡單導(dǎo)出 數(shù)據(jù)map導(dǎo)出

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

image.png

語法

循環(huán)開始 {{$fe:maplist t.ho
循環(huán)中間參數(shù) t.po
換行]]
循環(huán)結(jié)尾t.amount}}
統(tǒng)計(jì)循環(huán)數(shù)量{{sum:(t.amount)}}
單獨(dú)參數(shù){{totalQuantity}}

常見命令
? 空格分割
? 三目運(yùn)算 {{test ? obj:obj2}} ps:{{QcNum == 0?image:null}}
? n: 表示 這個(gè)cell是數(shù)值類型 {{n:}} ps:{{n:packingNum}}
? le: 代表長度{{le:()}} 在if/else 運(yùn)用{{le:() > 8 ? obj1 : obj2}}
? fd: 格式化時(shí)間 {{fd:(obj;yyyy-MM-dd)}}
? fn: 格式化數(shù)字 {{fn:(obj;###.00)}}
? fe: 遍歷數(shù)據(jù),創(chuàng)建row
? !fe: 遍歷數(shù)據(jù)不創(chuàng)建row
? $fe: 下移插入,把當(dāng)前行,下面的行全部下移.size()行,然后插入
? #fe: 橫向遍歷
? v_fe: 橫向遍歷值
? !if: 刪除當(dāng)前列 {{!if:(test)}}
? 單引號(hào)表示常量值 '' 比如'1' 那么輸出的就是 1
? &NULL& 空格
? ]] 換行符 多行遍歷導(dǎo)出
? sum: 統(tǒng)計(jì)數(shù)據(jù) {{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>

過濾的應(yīng)用場景


.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("產(chǎn)品信息", "產(chǎn)品信息",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轉(zhuǎn)數(shù)組
                 param.setExclusions(s);//過濾沒有選中的欄目導(dǎo)出
            }
            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", "生成失敗");
            }
        }

這個(gè)是文件上傳阿里云的 順便過濾選中自己想導(dǎo)出不同欄目的喇嘱,接下來看看實(shí)體類

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;

/**
 * 產(chǎn)品表-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 = "參數(shù)值不能為空")
    private Long id;

    // 產(chǎn)品名稱
    @Excel(name = "產(chǎn)品名稱", orderNum = "2", width = 20)
    private String name;

    // 產(chǎn)品編號(hào)
    @Excel(name = "產(chǎn)品編號(hào)", orderNum = "2", width = 20)
    private String code;

    // 樣品類別代碼
    private String typeCode;
    private String typeName;

    // 產(chǎn)品分類代碼
    private Integer categoryId;
    @Excel(name = "產(chǎn)品類別", orderNum = "3", width = 10)
    private String categoryName;

    // 產(chǎn)品分類備注
    private String categoryNote;

    // 主題代碼
    private String themeCode;
    @Excel(name = "產(chǎn)品主題", orderNum = "4", width = 10)
    private String themeName;

    // 供應(yīng)商代碼
    @Excel(name = "工廠代碼", orderNum = "6", width = 10)
    private String factoryCode;
    // 供應(yīng)商名稱
    @Excel(name = "工廠名稱", orderNum = "5", width = 30)
    private String factoryName;

    // 產(chǎn)品報(bào)價(jià)
    @Excel(name = "工廠報(bào)價(jià)", orderNum = "7", width = 10)
    private Double price;

    // 報(bào)價(jià)幣種
    @Excel(name = "幣種", orderNum = "8", width = 10)
    private String currency;

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

    // 開發(fā)人用戶名
    @Excel(name = "開發(fā)人", orderNum = "10", width = 15)
    private String developUser;

    // 設(shè)計(jì)人用戶名
    @Excel(name = "設(shè)計(jì)人", orderNum = "11", width = 15)
    private String designUser;

    // 產(chǎn)品材質(zhì)
    @Excel(name = "產(chǎn)品材質(zhì)", orderNum = "12", width = 15)
    private String material;

    // 工廠貨號(hào)
    @Excel(name = "工廠貨號(hào)", orderNum = "13", width = 15)
    private String factoryNo;

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

    // 圖片加密:0不加密绷落,1加密
    private Integer encrypt;

    // 上傳時(shí)間
    @Excel(name = "錄入時(shí)間", orderNum = "15", width = 20,exportFormat="yyyy-MM-dd")
    private Date ctime;

    // 圖片url
    @Excel(name = "產(chǎn)品圖片", 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;

    // 狀態(tài):0禁用块攒,1開啟 默認(rèn):0
    private Integer state;
    // 圖片樣式
    private String picStyle;

    private Integer isSuit;
    private String suitCode;

    private String fingerprint;// 指紋信息

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

    // 產(chǎn)品類型:0主料,1輔料
    private Integer proType;
    
    private String customerCode;
    
    private String topCategory;
    
    private int serialNum;//序列號(hào)
    
    private int filialeId;
}

用注解 包括日期格式 數(shù)字替換文字等

    @Excel(name = "錄入時(shí)間", orderNum = "15", width = 20,exportFormat="yyyy-MM-dd")
//時(shí)間格式
@Excel(name = "產(chǎn)品圖片", orderNum = "1", imageType = 1, type = 2, width = 35, height = 49)
//圖片
//數(shù)字替換成文字
@Excel(name = "發(fā)票狀態(tài)", orderNum = "1",replace = { "未推送_0", "已推送_1" }, width = 20)

map封裝導(dǎo)出比較類似

image.png

實(shí)體類導(dǎo)出excel 簡單導(dǎo)出

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

        ExportParams params = new ExportParams(null, "裝箱單報(bào)表", 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, "裝箱單報(bào)表");
        PoiViewUtil.render(model, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);
    }

js文件

//參數(shù)等  這個(gè)是最簡單的導(dǎo)出
window.location.href="/"+T.moduleName+"/packingReport/exportPackingReportExcel?"

導(dǎo)出復(fù)雜的word待續(xù)终佛。朽肥。橙数。激况。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末英古,一起剝皮案震驚了整個(gè)濱河市淀衣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌召调,老刑警劉巖膨桥,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唠叛,居然都是意外死亡只嚣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門艺沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來册舞,“玉大人,你說我怎么就攤上這事障般〉骶ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵挽荡,是天一觀的道長藐石。 經(jīng)常有香客問我,道長定拟,這世上最難降的妖魔是什么于微? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮青自,結(jié)果婚禮上株依,老公的妹妹穿的比我還像新娘。我一直安慰自己延窜,他們只是感情好恋腕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著需曾,像睡著了一般吗坚。 火紅的嫁衣襯著肌膚如雪祈远。 梳的紋絲不亂的頭發(fā)上呆万,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音车份,去河邊找鬼谋减。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扫沼,可吹牛的內(nèi)容都是我干的出爹。 我是一名探鬼主播庄吼,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼严就!你這毒婦竟也來了总寻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤梢为,失蹤者是張志新(化名)和其女友劉穎渐行,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铸董,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祟印,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粟害。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕴忆。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悲幅,靈堂內(nèi)的尸體忽然破棺而出套鹅,到底是詐尸還是另有隱情,我是刑警寧澤汰具,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布芋哭,位于F島的核電站,受9級(jí)特大地震影響郁副,放射性物質(zhì)發(fā)生泄漏减牺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一存谎、第九天 我趴在偏房一處隱蔽的房頂上張望拔疚。 院中可真熱鬧,春花似錦既荚、人聲如沸稚失。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽句各。三九已至,卻和暖如春晴叨,著一層夾襖步出監(jiān)牢的瞬間凿宾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工兼蕊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留初厚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓孙技,卻偏偏與公主長得像产禾,于是被迫代替她去往敵國和親排作。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容