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();
}
}
原网址: 访问
创建于: 2021-02-23 15:27:10
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论