基于阿里巴巴EasyExcel实现对复杂Excel模板的填充_/*少年梦*/的博客-CSDN博客_easyexcel模板填充

基于阿里巴巴EasyExcel实现对复杂Excel模板的填充

官方文档以及开源

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
github地址:https://github.com/alibaba/easyexcel
官网Excel填写案例 :https://www.yuque.com/easyexcel/doc/fill

对应修改

对阿里巴巴官方给的接口进行封装,使用构造器填入templatePath和filePath来初始化 内置对象ExcelWriter

代码展示

package util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.enums.WriteDirectionEnum;
import com.alibaba.excel.exception.ExcelGenerateException;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import org.apache.log4j.Logger;

/**
 * @author 朱永杰
 * 基于EasyExcel 的填充
 * <dependencies>
 *         <dependency>
 *             <groupId>com.alibaba</groupId>
 *             <artifactId>easyexcel</artifactId>
 *             <version>2.2.3</version>
 *         </dependency>
 *
 *         <dependency>
 *             <groupId>log4j</groupId>
 *             <artifactId>log4j</artifactId>
 *             <version>1.2.17</version>
 *         </dependency>
 *     </dependencies>
 *     https://www.yuque.com/easyexcel/doc/fill
 */
public class EasyExcelFillUtil {
    /**日志*/
    private Logger log = Logger.getLogger(EasyExcelFillUtil.class.getClass());
    /**Excel写*/
    private ExcelWriter excelWriter;
    /**竖着填*/
    private  FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();

    /**
     * 构造器
     * @param templatePath
     *             模板位置
     * @param filePath
     *             导出文件位置
     */
    public EasyExcelFillUtil(String templatePath, String filePath) {
        try {
            if (null!=templatePath&&null!=filePath) {
                excelWriter = EasyExcel.write(filePath).withTemplate(templatePath).build();
            }
            else {
                log.error("请保证模板地址和文件地址不为空");
                throw new RuntimeException();
            }
        }
        catch (ExcelGenerateException ex)
        {
            log.error(ex.getCause());
            throw new RuntimeException();
        }

    }

    /**
     * 获取 WriteSheet
     * @return WriteSheet
     */
    public WriteSheet getWriteSheet() {
        return EasyExcel.writerSheet().build();
    }

    /**
     * 根据对象(Map)默认填充
     * @param data 对象/Map
     * @return 操作结果
     */
    public boolean fill(Object data){
        return this.fill(data,null);
    }

    /**
     * 列表默认填充
     * @param fillWrapper new FillWrapper(collectionData)  单列表组合填充
     *                    new FillWrapper(String name, Collection collectionData) 多列表组合填充
     * @return 操作结果
     */
    public boolean fill(FillWrapper fillWrapper){
        return this.fill(fillWrapper,null);
    }

    /**
     * 根据对象(Map)指定Sheet名填充
     * @param data 对象/Map
     * @return 操作结果
     */
    public boolean fill(Object data, String sheetName){
        WriteSheet writeSheet= EasyExcel.writerSheet().build();
        if (null!=sheetName) {
            writeSheet.setSheetName(sheetName);
        }
        return this.fillWithSheet(data,writeSheet);
    }

    /**
     * 列表根据FillWrapper 按照Sheet名填充
     * @param fillWrapper new FillWrapper(collectionData)  单列表组合填充
     *                    new FillWrapper(String name, Collection collectionData) 多列表组合填充
     * @return 操作结果
     */
    public boolean fill(FillWrapper fillWrapper,String sheetName){
        WriteSheet writeSheet= EasyExcel.writerSheet().build();
        if (null!=sheetName) {
            writeSheet.setSheetName(sheetName);
        }
        return this.fillWithSheet(fillWrapper,writeSheet);
    }

    /**
     * 列表根据FillWrapper 按照WriteSheet填充
     * @param fillWrapper new FillWrapper(collectionData)  单列表组合填充
     *                    new FillWrapper(String name, Collection collectionData) 多列表组合填充
     * @return 操作结果
     */
    public boolean fillWithSheet(FillWrapper fillWrapper,WriteSheet writeSheet){
        try {
            if (null!=fillWrapper) {
                excelWriter.fill(fillWrapper, writeSheet);
                log.info("你已经填充一组集合数据");
                return true;
            }
        }
        catch (Exception ex)
        {
            log.error(ex.getCause());
            return false;
        }
        return false;
    }

    /**
     * 根据对象(Map)指定Sheet名填充
     * @param data 对象/Map
     * @return 操作结果
     */
    public boolean fillWithSheet (Object data,WriteSheet writeSheet){
        try {
            excelWriter.fill(data, writeSheet);
            log.info("你已经填充一则数据");
            return true;
        }
        catch (Exception ex)
        {
            log.error(ex.getCause());
            return false;
        }
    }

    /**
     * 关闭excelWriter流
     */
    public void destroy(){
        if(null!=excelWriter){
            log.info("导出结束");
            try {
                excelWriter.finish();
            }
            catch (Exception ex)
            {
                log.info("关闭失败");
            }
        }
    }
}

测试

import com.alibaba.excel.write.metadata.fill.FillWrapper;
import domain.ContractInfo;
import domain.Product;
import util.EasyExcelFillUtil;
import util.TestFileUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author 朱永杰
 */
public class TestDemo {
    private static List<Product> initProducts(){
        List<Product> productList=new ArrayList<Product>(10);
        for (int i=0;i<10;i++)
        {
            productList.add(new Product(i+1,"测"+i,"型"+i,i+1,(i+1*100.0),"备注"+i,(i+1)*(i+1*100.0))) ;
        }
        return productList;
    }
    private static ContractInfo initContractInfo(){
        ContractInfo contractInfo=new ContractInfo();
        /**签订日期*/
        contractInfo.setSigningData(new Date());
        /**合同编号*/
        contractInfo.setContractNo("123456");
        /**供方*/
        contractInfo.setSupplier("供方");
        /**需方*/
        contractInfo.setDemandSide("需求方");
        /**手机号*/
        contractInfo.setPhoneNumber("1222222");
        /**注册地址*/
        contractInfo.setRegisterAddr("空军一号");
        /**电话传真*/
        contractInfo.setTell("123456789");
        /**开户行*/
        contractInfo.setBank("中国农业银行");
        /**银行账号*/
        contractInfo.setBankAccount("DN12222");
        /**收货人*/
        contractInfo.setContactPerson("某某某");
        /**税号*/
        contractInfo.setTaxId("123455");
        /**价格备注*/
        contractInfo.setPriceRemark("aaaaa");
        /**运输方式*/
        contractInfo.setTransport("陆运");
        /**结算方式*/
        contractInfo.setSettlement("现金");
        /**发货时间*/
        contractInfo.setDeliverDate(new Date());
        /**运单号*/
        contractInfo.setWayBillNumber("SF1111111");
        /**底部备注*/
        contractInfo.setBottomNote("Demo");
        /**包装类型*/
        contractInfo.setPackType("纸箱");
        /**总计*/
        contractInfo.setTotal("122");
        return contractInfo;
    }
    /**
     * 多列表组合填充填充
     *
     * @since 2.2.0-beta1
     */
    public static void main(String[] args) {
        // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
        // {} 代表普通变量 {.} 代表是list的变量 {前缀.} 前缀可以区分不同的list
        String templateFileName =
                TestFileUtil.getPath() + "SFF--Model-EXCEL.xlsx";
        String fileName = TestFileUtil.getPath() + "compositeFill" + System.currentTimeMillis() + ".xlsx";
        EasyExcelFillUtil easyFill=new EasyExcelFillUtil(templateFileName,fileName);
        easyFill.fill(initContractInfo());
        easyFill.fill(new FillWrapper("product", initProducts()));
        easyFill.fill(new FillWrapper("product", initProducts()),"报价单");
        easyFill.destroy();
    }
}

默认sheet
第二个sheet


原网址: 访问
创建于: 2021-02-23 15:27:10
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论