目录
1.源码下载
2、先上结论
java
注意注意::::导出大文件的时候可能会有临时存储,
我的是在C:\Users\xbx\AppData\Local\Temp\poifiles
读csv文件
行数:1048575
hutool: 5205
esayPoi: 3929
easyExcel1: 1917
easyExcel2: 2832
读excel文件
行数:1048575
hutool: 58207
esayPoi: 25513
easyExce1: 10646
easyExcel2: 10123
写csv文件:
行数:1048575
hutool: 6136
esayPoi: 828
easyExcel1: 6943
easyExcel2: 5212
写excel文件:
行数:1048575
hutool1: 146655
hutool2: 23570
esayPoi1: 21805
esayPoi2: 93034
easyExcel1:20762
easyExcel2:20523
easyExcel3:15386
easyExcel4:14586
3、代码
3.1、实体、接口
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
/**
* @version v1.0
* @ProjectName: ltpon
* @ClassName: Strainentey
* @Description:
* @Author: xbx
* @Date: 2023/12/8 13:55
*/
@Data
public class DeviceDto {
//sn+channel
String sn;
//与地表距离(m)
Double surfaceDistance;
//结构层位
String structuralLayer;
//就写电信号
String channel;
//这个值就是StressStrainDataDto里面的key 如:"t.v1","t.v2"
String dataKey;
}
java
package cn.sdjtky.ltpon.FileTest;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
/**
* @version v1.0
* @ProjectName: ltpon
* @ClassName: Strainentey
* @Description:
* @Author: xbx
* @Date: 2023/12/8 13:55
*/
@Data
public class StrainEntity {
@Alias("时间")
String time;
@Alias("通道1")
String v1;
@Alias("通道2")
String v2;
@Alias("通道3")
String v3;
@Alias("通道4")
String v4;
Double v5;
Double v6;
Double v7;
Double v8;
}
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
/**
* @version v1.0
* @ProjectName: ltpon
* @ClassName: Strainentey
* @Description:
* @Author: xbx
* @Date: 2023/12/8 13:55
*/
@Data
public class StrainEntity2 {
@Excel(name = "时间")
String time;
@Excel(name = "通道1")
String v1;
@Excel(name = "通道2")
String v2;
@Excel(name = "通道3")
String v3;
@Excel(name = "通道4")
String v4;
Double v5;
Double v6;
Double v7;
Double v8;
}
java
package cn.sdjtky.ltpon.FileTest;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @version v1.0
* @ProjectName: ltpon
* @ClassName: Strainentey
* @Description:
* @Author: xbx
* @Date: 2023/12/8 13:55
*/
@Data
public class StrainEntity3 {
@ExcelProperty("时间")
String time;
@ExcelProperty("通道1")
String v1;
@ExcelProperty("通道2")
String v2;
@ExcelProperty("通道3")
String v3;
@ExcelProperty("通道4")
String v4;
Double v5;
Double v6;
Double v7;
Double v8;
}
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* @version v1.0
* @ProjectName: ltpon
* @ClassName: Strainentey
* @Description:
* @Author: xbx
* @Date: 2023/12/8 13:55
*/
@Data
public class StressStrainDataDto {
// 年/月/日
String date;
// 时/分/秒/毫秒
String time;
// 时/分/秒/毫秒
String dateTime;
Double v1;
Double v2;
Double v3;
Double v4;
Double v5;
Double v6;
Double v7;
Double v8;
Double v9;
Double v10;
Double v11;
Double v12;
Double v13;
}
java
package cn.sdjtky.ltpon.FileTest;
import cn.sdjtky.ltpon.FileTest.StrainEntity3;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.fastjson2.JSON;
import org.apache.poi.ss.formula.functions.T;
import java.util.ArrayList;
import java.util.List;
// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class Strain3ReadListener<T> implements ReadListener<T> {
/**
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
*/
/**
* 缓存的数据
*/
private List<T> cachedDataList = new ArrayList<T>();
/**
* 这个每一条数据解析都会来调用
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(T data, AnalysisContext context) {
cachedDataList.add(data);
// // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
// if (cachedDataList.size() >= BATCH_COUNT) {
// // 存储完成清理 list
// cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
// }
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
}
public List<T> getCachedDataList() {
return cachedDataList;
}
}
3.2、读CSV
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.csv.CsvImportUtil;
import cn.afterturn.easypoi.csv.entity.CsvImportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
public class ReadCsvTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ReadCsvTest.class);
@Test
public void test() {
String filePath = "G:/test/1048575.csv";
hutool(filePath);
// esayPoi(filePath);
// easyExcel1(filePath);
// easyExcel2(filePath);
}
public void hutool(String filePath) {
try {
long start = System.currentTimeMillis();
CsvReader reader = CsvUtil.getReader();
List<StrainEntity> result = reader.read(ResourceUtil.getUtf8Reader(filePath), StrainEntity.class);
long end = System.currentTimeMillis();
System.out.println("hutool:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
public void esayPoi(String filePath) {
try {
CsvImportParams params = new CsvImportParams(CsvImportParams.UTF8);
long start = System.currentTimeMillis();
List<StrainEntity2> result = CsvImportUtil.importCsv(
new FileInputStream(new File(filePath)),
StrainEntity2.class,
params);
long end = System.currentTimeMillis();
System.out.println("esayPoi:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel1(String filePath) {
try {
ImportParams params = new ImportParams();
List<StrainEntity3> result = new ArrayList<StrainEntity3>();
long start = System.currentTimeMillis();
EasyExcel.read(filePath, StrainEntity3.class, new AnalysisEventListener<StrainEntity3>() {
@Override
public void invoke(StrainEntity3 reportExcel, AnalysisContext analysisContext) {
// 将读取到的每一行存入reportDetails集合中
result.add(reportExcel);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}).excelType(ExcelTypeEnum.CSV).sheet().doRead();
long end = System.currentTimeMillis();
System.out.println("easyExcel1:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel2(String filePath) {
final Strain3ReadListener<StrainEntity3> strain3ReadListener = new Strain3ReadListener<StrainEntity3>() ;
try {
long start = System.currentTimeMillis();
EasyExcel.read(filePath, StrainEntity3.class, strain3ReadListener).sheet().doRead();
// EasyExcel.read(filePath)
// .excelType(ExcelTypeEnum.CSV)
// .registerReadListener(strain3ReadListener)
// .sheet()
// .doRead();
List<StrainEntity3> result = strain3ReadListener.getCachedDataList();
long end = System.currentTimeMillis();
System.out.println("easyExcel2:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.3、读Excel
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.handler.inter.IReadHandler;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.sdjtky.ltpon.easy.excel.listener.MergeCellsReadListener;
import cn.sdjtky.ltpon.poi.DemoDataListener;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.enums.CellExtraTypeEnum;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.fastjson2.JSON;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
public class ReadExcelTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ReadExcelTest.class);
@Test
public void test() {
String filePath = "G:/test/1048575.xlsx";
hutool(filePath);
// esayPoi(filePath);
// easyExcel1(filePath);
// easyExcel2(filePath);
}
public void hutool(String filePath) {
try {
long start = System.currentTimeMillis();
ExcelReader reader = ExcelUtil.getReader(filePath);
List<StrainEntity> result = reader.readAll(StrainEntity.class);
long end = System.currentTimeMillis();
System.out.println("hutool:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
public void esayPoi(String filePath) {
try {
ImportParams params = new ImportParams();
List<StrainEntity2> result = new ArrayList<StrainEntity2>();
long start = System.currentTimeMillis();
ExcelImportUtil.importExcelBySax(
new FileInputStream(new File(filePath)),
StrainEntity2.class,
params,
new IReadHandler<StrainEntity2>() {
@Override
public void handler(StrainEntity2 o) {
result.add(o);
}
@Override
public void doAfterAll() {
System.out.println("全部执行完毕了--------------------------------");
}
});
long end = System.currentTimeMillis();
System.out.println("esayPoi:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel1(String filePath) {
try {
ImportParams params = new ImportParams();
List<StrainEntity3> result = new ArrayList<StrainEntity3>();
long start = System.currentTimeMillis();
EasyExcel.read(filePath, StrainEntity3.class, new AnalysisEventListener<StrainEntity3>() {
@Override
public void invoke(StrainEntity3 reportExcel, AnalysisContext analysisContext) {
// 将读取到的每一行存入reportDetails集合中
result.add(reportExcel);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}).sheet().doRead();
long end = System.currentTimeMillis();
System.out.println("easyExcel1:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel2(String filePath) {
final Strain3ReadListener<StrainEntity3> strain3ReadListener = new Strain3ReadListener<StrainEntity3>() ;
try {
long start = System.currentTimeMillis();
EasyExcel.read(filePath, StrainEntity3.class, strain3ReadListener).sheet().doRead();
// EasyExcel.read(filePath)
// .registerReadListener(strain3ReadListener)
// .sheet()
// .doRead();
List<StrainEntity3> result = strain3ReadListener.getCachedDataList();
long end = System.currentTimeMillis();
System.out.println("easyExcel2:"+ (end-start));
System.out.println("行数:"+result.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.4、写CSV
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.csv.CsvExportUtil;
import cn.afterturn.easypoi.csv.CsvImportUtil;
import cn.afterturn.easypoi.csv.entity.CsvExportParams;
import cn.afterturn.easypoi.csv.entity.CsvImportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import cn.hutool.core.util.CharsetUtil;
import cn.sdjtky.ltpon.query.HumidityQuery;
import cn.sdjtky.ltpon.utils.BeanCopierUtils;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class WriteCsvTest {
private static final Logger LOGGER = LoggerFactory.getLogger(WriteCsvTest.class);
@Test
public void test() {
String filePath = "G:/test/1048575.csv";
List<StrainEntity3> strainEntity3List = Rerad_easyExcel1(filePath);
List<StrainEntity> strainEntityList = BeanCopierUtils.list(strainEntity3List, StrainEntity::new);
List<StrainEntity2> strainEntity2List = BeanCopierUtils.list(strainEntity3List, StrainEntity2::new);
// List<StrainEntity3> strainEntity3List = BeanCopierUtils.list(strainEntity3List, StrainEntity3::new);
// hutool(strainEntityList);
// esayPoi(strainEntity2List);
// easyExcel1(strainEntity3List);
easyExcel2(strainEntity3List);
}
public List<StrainEntity3> Rerad_easyExcel1(String filePath) {
List<StrainEntity3> result = new ArrayList<StrainEntity3>();
try {
ImportParams params = new ImportParams();
EasyExcel.read(filePath, StrainEntity3.class, new AnalysisEventListener<StrainEntity3>() {
@Override
public void invoke(StrainEntity3 reportExcel, AnalysisContext analysisContext) {
// 将读取到的每一行存入reportDetails集合中
result.add(reportExcel);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}).excelType(ExcelTypeEnum.CSV).sheet().doRead();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public void hutool(List<StrainEntity> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
CsvWriter writer = CsvUtil.getWriter("G:/test/write/hutool.csv", CharsetUtil.CHARSET_UTF_8);
// writer.write(list);
writer.writeBeans(list);
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("hutool:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void esayPoi(List<StrainEntity2> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
CsvExportParams params = new CsvExportParams(CsvImportParams.UTF8);
FileOutputStream fos = new FileOutputStream("G:/test/write/esayPoi.csv");
CsvExportUtil.exportCsv(params, StrainEntity2.class, list, fos);
fos.flush();
fos.close();
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("esayPoi:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel1(List<StrainEntity3> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
FastByteArrayOutputStream fastByteArrayOutputStream = new FastByteArrayOutputStream();
try {
EasyExcel.write(fastByteArrayOutputStream, StrainEntity3.class)
.autoCloseStream(false)
.excelType(ExcelTypeEnum.CSV)
.sheet("sheet页")
.doWrite(list);
FileOutputStream fileOutputStream = new FileOutputStream("G:/test/write/easyExcel.csv");
fastByteArrayOutputStream.writeTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} finally {
}
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel1:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel2(List<StrainEntity3> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
try {
EasyExcel.write("G:/test/write/easyExcel.csv", StrainEntity3.class).excelType(ExcelTypeEnum.CSV).sheet("sss").doWrite(list);
} finally {
}
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel2:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.5、写Excel
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.handler.inter.IExcelExportServer;
import cn.afterturn.easypoi.handler.inter.IReadHandler;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.sdjtky.ltpon.utils.BeanCopierUtils;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.ruoyi.common.utils.uuid.IdUtils;
import lombok.SneakyThrows;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class WriteExcelTest {
private static final Logger LOGGER = LoggerFactory.getLogger(WriteExcelTest.class);
@Test
public void test() {
String filePath = "G:/test/1048575.csv";
List<StrainEntity3> strainEntity3List = Rerad_easyExcel1(filePath);
List<StrainEntity> strainEntityList = BeanCopierUtils.list(strainEntity3List, StrainEntity::new);
List<StrainEntity2> strainEntity2List = BeanCopierUtils.list(strainEntity3List, StrainEntity2::new);
// hutool1(strainEntityList);
// hutool2(strainEntityList);
// esayPoi1(strainEntity2List);
// esayPoi2(strainEntity2List);
// easyExcel1(strainEntity3List);
// easyExcel2(strainEntity3List);
// easyExcel3(strainEntity3List);
easyExcel4(strainEntity3List);
}
public List<StrainEntity3> Rerad_easyExcel1(String filePath) {
List<StrainEntity3> result = new ArrayList<StrainEntity3>();
try {
ImportParams params = new ImportParams();
EasyExcel.read(filePath, StrainEntity3.class, new AnalysisEventListener<StrainEntity3>() {
@Override
public void invoke(StrainEntity3 reportExcel, AnalysisContext analysisContext) {
// 将读取到的每一行存入reportDetails集合中
result.add(reportExcel);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}).excelType(ExcelTypeEnum.CSV).sheet().doRead();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public void hutool1(List<StrainEntity> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
ExcelWriter writer = ExcelUtil.getWriter("G:/test/write/hutool.xlsx");
writer.write(list, true);
// 关闭writer,释放内存
writer.close();
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("hutool:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void hutool2(List<StrainEntity> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
BigExcelWriter writer= ExcelUtil.getBigWriter("G:/test/write/hutool2"+ IdUtils.getSequenceID()+".xlsx");
writer.write(list);
writer.close();
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("hutool2:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void esayPoi1(List<StrainEntity2> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
ExportParams params = new ExportParams();
params.setMaxNum(1048576);
Workbook workbook = null;
workbook = ExcelExportUtil.exportBigExcel(params, StrainEntity2.class, new IExcelExportServer() {
@Override
public List<Object> selectListForExcelExport(Object obj, int page) {
if (list.size()<=0){
return null;
}
List<Object> listObj = new ArrayList<Object>();
listObj.addAll(list);
list.clear();
return listObj;
}
}, 1);
// workbook = ExcelExportUtil.exportExcel(params,StrainEntity2.class,list);
FileOutputStream fos = new FileOutputStream("G:/test/write/esayPoi.xlsx");
workbook.write(fos);
fos.close();
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("esayPoi:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void esayPoi2(List<StrainEntity2> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
Map<String, Object> map = new HashMap<String, Object>();
map.put("list", list);
TemplateExportParams params = new TemplateExportParams("G:/test/t/StrainEntity2.xlsx");
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
FileOutputStream fos = new FileOutputStream("G:/test/write/esayPoi2.xlsx");
workbook.write(fos);
fos.close();
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("esayPoi2:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel1(List<StrainEntity3> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
FastByteArrayOutputStream fastByteArrayOutputStream = new FastByteArrayOutputStream();
try {
EasyExcel.write(fastByteArrayOutputStream, StrainEntity3.class)
.autoCloseStream(false)
.excelType(ExcelTypeEnum.XLSX)
.sheet("sheet页")
.doWrite(list);
FileOutputStream fileOutputStream = new FileOutputStream("G:/test/write/easyExcel.xlsx");
fastByteArrayOutputStream.writeTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} finally {
}
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel1:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel2(List<StrainEntity3> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
try {
EasyExcel.write("G:/test/write/easyExcel.xlsx", StrainEntity3.class).excelType(ExcelTypeEnum.XLSX).sheet("sss").doWrite(list);
} finally {
}
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel2:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel3(List<StrainEntity3> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
String templateFileName = "G:/test/t/StrainEntity3.xlsx";
String fileName = "G:/test/write/easyExcel.xlsx";
// 方案1 一下子全部放到内存里面 并填充
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(list);
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel3:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel4(List<StrainEntity3> list) {
System.out.println("数据行数:"+list.size());
try {
long start = System.currentTimeMillis();
FastByteArrayOutputStream fastByteArrayOutputStream = new FastByteArrayOutputStream();
// 方案2 分多次 填充 会使用文件缓存(省内存)
String templateFileName = "G:/test/t/StrainEntity3.xlsx";
String fileName = "G:/test/write/easyExcel.xlsx";
try (com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(fastByteArrayOutputStream).withTemplate(templateFileName).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
excelWriter.fill(list, writeSheet);
}
// String templateFileName = "G:/test/t/StrainEntity3.1.xlsx";
// String fileName = "G:/test/write/easyExcel.xlsx";
// try (com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) {
// WriteSheet writeSheet = EasyExcel.writerSheet().build();
// excelWriter.fill(new FillWrapper("sl", list), writeSheet);
// }
// String templateFileName = "G:/test/t/StrainEntity3.1.xlsx";
// String fileName = "G:/test/write/easyExcel.xlsx";
// try (com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) {
// WriteSheet writeSheet = EasyExcel.writerSheet().build();
// excelWriter.fill(new FillWrapper("sl", listX), writeSheet);
// excelWriter.fill(new FillWrapper("sl", listX), writeSheet);
// excelWriter.fill(new FillWrapper("sl", listX), writeSheet);
// excelWriter.fill(new FillWrapper("sl", listX), writeSheet);
// excelWriter.fill(new FillWrapper("sl", listX), writeSheet);
// }
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel4:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.6、业务示例
java
package cn.sdjtky.ltpon.FileTest;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.handler.inter.IExcelExportServer;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.sdjtky.ltpon.utils.BeanCopierUtils;
import cn.sdjtky.ltpon.utils.LocalDateTimeUtils;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.enums.WriteDirectionEnum;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.time.LocalDateTime;
import java.util.*;
public class StressStrainTest {
private static final Logger LOGGER = LoggerFactory.getLogger(StressStrainTest.class);
private static final String stationName = "临沂G205观测点";
private static final String pileNumber = "K103--K113";
private static final String observer = "徐本锡";
private static final String observationDate = LocalDateTimeUtils.format(LocalDateTimeUtils.DEFAULT_PATTERN,LocalDateTime.now());
private static final String reviewer = "金小少";
private static final String reviewDate = LocalDateTimeUtils.format(LocalDateTimeUtils.DEFAULT_PATTERN,LocalDateTime.now());
@Test
public void test() {
// esayPoi2();
easyExcel4();
// easyExcelCSV2();
}
public Map<String, Object> getData(){
Map<String, Object> map = new HashMap<String, Object>();
List<DeviceDto> deviceList = new ArrayList<DeviceDto>();
for (int i=1; i<=8; i++){
DeviceDto deviceDto= new DeviceDto();
deviceDto.setSn("传感器x_"+i);
deviceDto.setSurfaceDistance(Double.valueOf(i));
deviceDto.setStructuralLayer("层位"+i);
deviceDto.setChannel("电信号");
deviceDto.setDataKey("t.v"+i);
deviceList.add(deviceDto);
}
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
List<StressStrainDataDto> dataList2 = new ArrayList<StressStrainDataDto>();
for(int i=0; i<100; i++){
Map<String, Object> m = new HashMap<String, Object>();
StressStrainDataDto dto = new StressStrainDataDto();
for (int j=1; j<=8; j++){
m.put("date", DateUtils.datePath());
m.put("time", DateUtils.dateTimeNow(DateUtils.HHMMssSSS_1));
m.put("v"+j, Math.random()+1);
dto.setDate(DateUtils.datePath());
dto.setTime(DateUtils.dateTimeNow(DateUtils.HHMMssSSS_1));
dto.setDateTime(DateUtils.dateTimeNow(DateUtils.YYYYMMDDHHMMssSSS_1));
dto.setV1( Math.random()+1);
dto.setV2( Math.random()+1);
dto.setV3( Math.random()+1);
dto.setV4( Math.random()+1);
dto.setV5( Math.random()+1);
dto.setV6( Math.random()+1);
dto.setV7( Math.random()+1);
dto.setV8( Math.random()+1);
}
dataList.add(m);
dataList2.add(dto);
}
map.put("stationName", stationName);
map.put("pileNumber", pileNumber);
map.put("observer", observer);
map.put("observationDate", observationDate);
map.put("reviewer", reviewer);
map.put("reviewDate", reviewDate);
map.put("deviceList", deviceList);
map.put("dataList", dataList2);
return map;
}
public void esayPoi2() {
Map<String, Object> data = getData();
System.out.println("数据行数:"+((List)data.get("dataList")).size());
try {
long start = System.currentTimeMillis();
TemplateExportParams params = new TemplateExportParams("G:/test/t/stressStrainTemplateDongHua.xlsx");
params.setColForEach(true);
Workbook workbook = ExcelExportUtil.exportExcel(params, data);
FileOutputStream fos = new FileOutputStream("G:/test/write/stressStrainTemplateDongHua.xlsx");
workbook.write(fos);
fos.close();
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("esayPoi2:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcel4() {
Map<String, Object> data = getData();
Map<String, Object> data1 = new HashMap<String, Object>();
data1.put("stationName", data.get("stationName"));
data1.put("pileNumber", data.get("pileNumber"));
data1.put("observer", data.get("observer"));
data1.put("observationDate", data.get("observationDate"));
data1.put("reviewer", data.get("reviewer"));
data1.put("reviewDate", data.get("reviewDate"));
List<DeviceDto> deviceList = (List<DeviceDto>) data.get("deviceList");
List<StressStrainDataDto> dataList = (List<StressStrainDataDto>) data.get("dataList");
// 根据用户传入字段 导出数据
Set<String> includeColumnFiledNames = new HashSet<String>();
includeColumnFiledNames.add("date");
// includeColumnFiledNames.add("time");
for(int i=0; i<deviceList.size(); i++){
includeColumnFiledNames.add("v"+(i+1));
}
System.out.println("数据行数:"+((List)data.get("dataList")).size());
try {
long start = System.currentTimeMillis();
Resource resource = new DefaultResourceLoader().getResource("classpath:templates/stressStrain/stressStrainTemplateDongHua.xlsx");
FastByteArrayOutputStream outputStream = new FastByteArrayOutputStream();
// 方案2 分多次 填充 会使用文件缓存(省内存)
// String templateFileName = "G:/test/t/stressStrainTemplateDongHua2.xlsx";
// try (com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(fastByteArrayOutputStream).withTemplate(templateFileName).build()) {
// WriteSheet writeSheet = EasyExcel.writerSheet().build();
// FillConfig fillConfig = FillConfig.builder().autoStyle(true).direction(WriteDirectionEnum.HORIZONTAL).build();
// excelWriter.fill(data1, writeSheet);
// excelWriter.fill(new FillWrapper("deviceList", deviceList), fillConfig, writeSheet);
writeSheet.setIncludeColumnFieldNames(includeColumnFiledNames);
// excelWriter.fill(new FillWrapper("dataList", dataList), writeSheet);
// }
try (com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(resource.getInputStream()).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().autoStyle(true).direction(WriteDirectionEnum.HORIZONTAL).build();
excelWriter.fill(data1, writeSheet);
excelWriter.fill(new FillWrapper("deviceList", deviceList), fillConfig, writeSheet);
excelWriter.fill(new FillWrapper("dataList", dataList), writeSheet);
excelWriter.close();
outputStream.flush();
outputStream.close();
}
// FileOutputStream fileOutputStream = new FileOutputStream("G:/test/write/123.xlsx");
// outputStream.writeTo(fileOutputStream);
// fileOutputStream.flush();
// fileOutputStream.close();
long end = System.currentTimeMillis();
// String templateFileName = "G:/test/t/stressStrainTemplateDongHua2.xlsx";
// String fileName = "G:/test/write/stressStrainTemplateDongHua2.xlsx";
// try (com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(resource.getInputStream()).build()) {
// WriteSheet writeSheet = EasyExcel.writerSheet().build();
// FillConfig fillConfig = FillConfig.builder().autoStyle(true).direction(WriteDirectionEnum.HORIZONTAL).build();
// excelWriter.fill(data1, writeSheet);
// excelWriter.fill(new FillWrapper("deviceList", deviceList), fillConfig, writeSheet);
writeSheet.setIncludeColumnFieldNames(includeColumnFiledNames);
// excelWriter.fill(new FillWrapper("dataList", dataList), writeSheet);
// }
long cost = end-start;
System.out.println("easyExcel4:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
public void easyExcelCSV2() {
Map<String, Object> data = getData();
List<DeviceDto> deviceList = (List<DeviceDto>) data.get("deviceList");
List<StressStrainDataDto> dataList = (List<StressStrainDataDto>) data.get("dataList");
// 根据用户传入字段 导出数据
Set<String> includeColumnFiledNames = new HashSet<String>();
List<List<String>> headList = new ArrayList<List<String>>();
List<String> head0 = new ArrayList<String>();
head0.add("时间");
head0.add("与路表距离");
head0.add("结构层位");
headList.add(head0);
includeColumnFiledNames.add("dateTime");
for(int i=0; i<deviceList.size(); i++){
includeColumnFiledNames.add("v"+(i+1));
List<String> head = new ArrayList<String>();
head.add(deviceList.get(i).getSn());
head.add(deviceList.get(i).getSurfaceDistance().toString());
head.add(deviceList.get(i).getStructuralLayer());
headList.add(head);
}
System.out.println("数据行数:"+((List)data.get("dataList")).size());
try {
long start = System.currentTimeMillis();
try {
EasyExcel.write("G:/test/write/stressStrainTemplateDongHua2.csv", StressStrainDataDto.class).head(headList).includeColumnFieldNames(includeColumnFiledNames).excelType(ExcelTypeEnum.CSV).sheet("sss").doWrite(dataList);
} finally {
}
long end = System.currentTimeMillis();
long cost = end-start;
System.out.println("easyExcel2:"+ cost);
} catch (Exception e) {
e.printStackTrace();
}
}
}