如何创建springboot项目就不做赘述了直接开始导入导出吧
1.引入easyexcel 依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel-version}</version>
</dependency>
<easyexcel-version>2.2.10</easyexcel-version>
复制
2.在需要导入导出的实体类上添加模板注解
/**
* 专题名称
*/
@ExcelProperty(index = 0,value = "专题名称")
@Column(name = "special", nullable = true,length = 255)
private String special;
/**
* 标题名称
*/
@ExcelProperty(index = 1,value = "标题名称")
@Column(name = "title", nullable = true ,length = 255)
private String title;
/**
* 技术栈ID
*/
@ExcelIgnore
@Column(name = "technology_id", nullable = true, length = 36)
private String technologyId;
复制
2.1@ExcelProperty(index = 1,value = "标题名称")该注解标注 需要导入导出的字段
2.2@ExcelIgnore 该注解标注 无需导入导出的字段
3.导出excel
-------------------------------------------------直接上代码-------------------------------------------
/**
* @Description: 导出
* @Author: Kra
* @Date: 2021/8/19 13:22
*/
@Override
public void export(HttpServletResponse response) throws IOException {
// 注意:easyexcel 最多显示0-1048576条数据 超过会报错需要处理
// 1.获取面经题库所有的条数
Integer number = questionBankRepository.getCount();
// 2.计算按每页五万条数据可以存放几页
Integer sheetPage = number % excelPageNumber == 0 ?number/excelPageNumber : number/excelPageNumber + 1;
ServletOutputStream out = response.getOutputStream();
log.info("开始导出{}数据...",sheetName);
// 3.创建excel写入对象
ExcelWriter excelWriter = EasyExcel.write(out, QuestionBank.class).build();
for (Integer i = 1; i <= sheetPage; i++) {
Page<QuestionBank> questionBanks = questionBankRepository.findAll(LimitParaUtils.getPageRequest(i, excelPageNumber));
// 4.1.创建sheet
WriteSheet sheet = EasyExcel.writerSheet("sheet"+i).build();
// 4.2.写入
excelWriter.write(questionBanks.getContent(), sheet);
}
//通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
response.setHeader("Content-disposition", "attachment;filename=" + new String( sheetName.getBytes("gb2312"), "ISO8859-1" ) + suffix);
// 5.关闭
excelWriter.finish();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
out.flush();
log.info("导出完成!");
}
复制
要计算要导出的数据的总条数:
questionBankRepository.getCount();
复制
具体实现如下:
@Query(value = "select count(1) from t_question_bank",nativeQuery = true)
Integer getCount();
复制
注:至此后端导出结束,如此导出的excel前端需要做处理待续...
4.导入excel
需要一个监听类
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.myapestech.education.pojo.edu.QuestionBank;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: Kra
* @Version: 1.0
* @Date: 2021/08/19/ 15:33
* @Description: excel 读取监听类
*/
public class EasyExcelListenner extends AnalysisEventListener<QuestionBank> {
private List<QuestionBank> datas = new ArrayList<>();
/**
* When analysis one row trigger invoke function.
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(QuestionBank data, AnalysisContext context) {
datas.add(data);
}
public List<QuestionBank> getDatas() {
return datas;
}
public void setDatas(List<QuestionBank> datas) {
this.datas = datas;
}
/**
* if have something to do after all analysis
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 读取结束执行的操作
}
}
复制
5.开始编写导入excel 的代码 (excel 导入的所有的sheet必须为同一模板)
/**
* @Description: 导入
* @Author: Kra
* @Date: 2021/8/19 15:06
*/
@Override
@Transactional
public void imports(MultipartFile file) throws IOException {
//1.获取文件流
InputStream inputStream = file.getInputStream();
//2.实例化实现了AnalysisEventListener接口的类
EasyExcelListenner listener = new EasyExcelListenner();
//3.创建excel读取对象
ExcelReader excelReader = EasyExcel.read(inputStream, QuestionBank.class, listener).build();
//4.读取有几个sheet表
Integer sheetNum = excelReader.getSheets().size();
log.info("开始读取excel...");
for (Integer i = 0; i < sheetNum; i++) {
ReadSheet readSheet = EasyExcel.readSheet(i).build();
excelReader.read(readSheet);
excelReader.finish();
}
log.info("读取excel完成!");
//5.获取数据
List<QuestionBank> list = listener.getDatas();
//6.判断重复则不插入
log.info("开始写入数据库...");
for (QuestionBank q : list) {
Example example = Example.of(q);
boolean exists = questionBankRepository.exists(example);
if(!exists){
q.setCreatedTime(new Date());
questionBankRepository.save(q);
}
continue;
}
log.info("写入完成!");
}
复制
至此springboot 整合 easyexcel 实现导入导出就完成了!
如有文章对你有帮助,
欢迎关注❤️、点赞👍、转发📣!
复制
文章转载自精准丶优雅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1338次阅读
2025-04-27 16:53:22
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
823次阅读
2025-04-30 15:24:06
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
545次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
512次阅读
2025-04-30 12:17:56
GoldenDB数据库v7.2焕新发布,助力全行业数据库平滑替代
GoldenDB分布式数据库
486次阅读
2025-04-30 12:17:50
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
370次阅读
2025-04-18 10:01:22
给准备学习国产数据库的朋友几点建议
白鳝的洞穴
364次阅读
2025-05-07 10:06:14
XCOPS广州站:从开源自研之争到AI驱动的下一代数据库架构探索
韩锋频道
320次阅读
2025-04-29 10:35:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
309次阅读
2025-04-28 11:01:25
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
293次阅读
2025-04-23 12:04:21