package com.example.exceldemo.sercice.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.exceldemo.common.RoleEnum;
import com.example.exceldemo.common.SexEnum;
import com.example.exceldemo.dao.EtaoUserDao;
import com.example.exceldemo.entity.EtaoUser;
import com.example.exceldemo.entity.EtaoUserExcel;
import com.example.exceldemo.entity.ExportEtaoUser;
import com.example.exceldemo.exception.BusinessException;
import com.example.exceldemo.listener.GenericExcelDataListener;
import com.example.exceldemo.sercice.EtaoService;
import com.example.exceldemo.util.ExcelUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.SimpleTimeZone;
@Service
@Slf4j
public class EtaoServiceImpl implements EtaoService {
private static final String TEMPLATE_FILE_PATH = "excelTemplate/";
// 表头数据占用行数
private final Integer HEAD_ROW_NUMBER = 1;
// excel时间格式
private static final String DEFAULT_DATE_PATTERN = "yyyy年MM月dd日HH时mm分ss秒";
// excel 表内容字体大小
private static final short CONTENT_WRITE_FONT = 12;
// excel 表头字体大小
private static final short HEAD_WRITE_FONT = 16;
@Autowired
private EtaoUserDao etaoUserDao;
@Override
@Transactional(rollbackFor = Exception.class)
public void importUserInfo(MultipartFile file) {
String fileName = file.getOriginalFilename();
if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
log.error("文件[" + fileName + "]格式错误,请上传excel文件");
throw new BusinessException("文件格式错误,请上传excel文件");
}
GenericExcelDataListener<EtaoUserExcel> genericExcelDataListener = new GenericExcelDataListener<>();
List<EtaoUserExcel> etaoUserExcels = null;
try {
EasyExcel.read(new BufferedInputStream(file.getInputStream()), EtaoUserExcel.class, genericExcelDataListener)
.sheet()
.autoTrim(false)
.headRowNumber(HEAD_ROW_NUMBER)
.doRead();
etaoUserExcels = genericExcelDataListener.getDataList();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (BusinessException ex) {
throw ex;
}
if (ObjectUtil.isEmpty(etaoUserExcels)) {
log.error("文件数据为空");
throw new BusinessException("文件数据为空");
}
etaoUserExcels.forEach(etaoUser -> {
try {
EtaoUser user = new EtaoUser();
BeanUtils.copyProperties(etaoUser, user);
// 角色名称与角色ID的转换
user.setRoleId(RoleEnum.getRoleIdByName(etaoUser.getRoleId()));
user.setUpdateData(new Date());
user.setDeleteState((short) 0);
user.setSex(SexEnum.getSexCodeByName(etaoUser.getSex()));
user.setCreatData(new SimpleDateFormat(DEFAULT_DATE_PATTERN).parse(etaoUser.getCreatData()));
// 新增角色
etaoUserDao.insert(user);
} catch (ParseException e) {
throw new RuntimeException(e);
}
});
}
@Override
public void exportEmployeeExcel(HttpServletResponse response) {
//获取所有数据
List<EtaoUser> etaoUsers = etaoUserDao.selectList(
new LambdaQueryWrapper<EtaoUser>()
.select(EtaoUser::getUserName,
EtaoUser::getNiceName,
EtaoUser::getRoleId,
EtaoUser::getCreatData,
EtaoUser::getUpdateData,
EtaoUser::getSex));
List<ExportEtaoUser> userList = new ArrayList<>();
if (!ObjectUtil.isEmpty(etaoUsers)) {
for (EtaoUser etaoUser : etaoUsers) {
// 字段转换
ExportEtaoUser exportEtaoUser = new ExportEtaoUser();
BeanUtils.copyProperties(etaoUser, exportEtaoUser);
exportEtaoUser.setSex(SexEnum.getSexNameByCode(etaoUser.getSex()));
exportEtaoUser.setRoleId(RoleEnum.getRoleNameById(etaoUser.getRoleId()));
exportEtaoUser.setCreatData(new SimpleDateFormat(DEFAULT_DATE_PATTERN).format(etaoUser.getCreatData()));
exportEtaoUser.setUpdateData(new SimpleDateFormat(DEFAULT_DATE_PATTERN).format(etaoUser.getUpdateData()));
userList.add(exportEtaoUser);
}
}
// 方法1 使用已有的策略 推荐
// HorizontalCellStyleStrategy 每一行的样式都一样 或者隔行一样
// AbstractVerticalCellStyleStrategy 每一列的样式都一样 需要自己回调每一页
// 头的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景设置为红色
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints(HEAD_WRITE_FONT);
headWriteCellStyle.setWriteFont(headWriteFont);
// 内容的策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
WriteFont contentWriteFont = new WriteFont();
// 字体大小
contentWriteFont.setFontHeightInPoints(CONTENT_WRITE_FONT);
contentWriteCellStyle.setWriteFont(contentWriteFont);
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// EasyExcel.write(fileName, ExportEtaoUser.class)
// .registerWriteHandler(horizontalCellStyleStrategy)
// .sheet("用户")
// .doWrite(userList);
try {
ExcelUtils.writeExcel(response,userList,"用户导出数据","用户",ExportEtaoUser.class,horizontalCellStyleStrategy);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在Spring Boot中实现Excel的导入导出可以通过POI库来实现,POI是一个开源的Java库,用于处理Microsoft Office格式文件,包括Excel。一个简单的示例,演示如何在Spring Boot项目中使用POI来实现Excel的导入导出功能。 导出Excel 准备数据: 首先,你需要有一份员工数据,可以是从数据库中查询得到的,也可以是已有的数据集合。 创建Excel文件: 使用POI库创建一个新的Excel文件。在文件中创建一个工作表,并在第一行创建标题行,包含员工的姓名、年龄和部门等信息。 填充数据: 遍历你的员工数据集合,将每个员工的信息写入到工作表的每一行中。 设置响应头: 设置响应的Content-Type为application/vnd.ms-excel,并设置Content-Disposition为attachment; filename=employees.xlsx,这样浏览器就会将响应解释为要下载的Excel文件。 将Excel写入响应流: 使用response.getOutputStream()获取输出流,然后将工作簿写入到输出流中.....
资源推荐
资源详情
资源评论
收起资源包目录
使用Springboot实现excel的导入导出 (221个子文件)
03fdf6325ad29e48cccf70912b46893a107187 261B
0a0ca65fc5d0110a8010556374785b257bc3c0 49B
0c030d3b17b4cc18e5a04cd9b6618857da89ff 797B
0c4ef8c9429dddef3efe19f7905ce7cdc4f2c7 119B
19052e6648bee33854de19b104a94acaf1788b 62B
247b0a900bde062cb992fd463795a7ce47f2a9 86B
27597cef76ffc07f0d106075ee9efe544fee29 2KB
317d8d425c6eefd996bacf107da54111ec64f2 61B
35ad395aed0c05e32f8c4d5a2e4b0bf403461c 1KB
39e3e1755483669cb970da0bff62ac6c7e0807 239B
3e139674393a14903a0c8eb41e1dbbc6d4aa14 513B
45f4237ac10bf47981c699537091e9ce1adf8d 46B
486a6d09e0e3d871fb2fcf0de8f7a41e266775 75B
49116f780e83af3edd2b7ebe5bb0929f9a8677 260B
50fc8292d39e979c9c542ade3d0c1ea04af722 266B
595253a80b662a4914218175d0e91a1e168ebd 463B
5b3b3e9a9f374e264404056ab250b1374d1b7d 45B
693f1343cd75e078de4f40ec78b94f0c76811f 583B
6986cb4449a19092ddcc951507deba12b15680 79B
6c448d5c0cc155c5557bc3619dd00037fa1cd8 51B
6dcf26c09221fa4ee7c3f0a5ab2cbde5931b1c 105B
76550bd1598bcf7fbaf0b8ef863c6b4e21850e 49B
7f6fdc77186a5ea852dec311826eb8e07ad3bf 505B
8566db1b663420aed744f5d281b17137d1edb1 99B
860156c8a486d20aec52d71d161d96b3ecd3d8 8KB
9325e2512ab469d2c75c4bb4abc5c2e5a25e29 2KB
94cf9ab9539cb0db201061f45fa454d1b1a988 75B
9c34be1d619b7a1c49f1c719af5189ee629140 45B
9cef26e2d5fb60ebf34d7d6f9fed00ea849b77 848B
9cff4469ab45b6e44114040cb81d153d84b9ba 2KB
9e00a2a96fa9d7c5dbc9859664a78d980158c2 249B
9ea8cd7c18e1523cb9e706d014f8ef500e00ff 545B
9f2dbe75f10afc05eef0795a086ad9f3c6e155 91B
a4d94639952165be68a89790eb5e504970913c 171B
a882d861f9b2d1df4275e180dbfbde866ca0c4 122B
a8eb8ca75718419d7dfa7e50b865d6e930406b 194B
a9fab5ae7d25ab67f94834bde4f26cdc34fa00 345B
b6723cbd7bc4be07a11e4b580ab4cf62b383aa 65B
bacbdc1c073fba60c9d975c1284e686e7b68f5 255B
bbc4789856db312f0fde23a777df025fcf0876 569B
be473aaf1777b4455d6f4c766f2c6066a50da7 749B
ca1c5b86b6110c4f486a9d3b631de37a101c18 52B
cb370f6a191995c6125d149ad5404790be93bc 70B
COMMIT_EDITMSG 13B
config 307B
d0ff299eac3340ad51067f086689bfc74309ab 72B
description 73B
df1a28f7eb4d99a40dffc859de8b8df2a11804 677B
e2365e77825b43200d8c078e8bd62f1ddd7785 58B
e74815e0fe859a45edce4b1a92d940a5026efc 142B
ee58c4172bbd67fb0e0f5c4019d2873668930e 942B
exclude 240B
f1a3eaa5f042af2da80536a833158f6cfb7d9b 107B
f4ea460c2b7292d5fe5832bc0a2ccd33497e14 2KB
f72e972a8d7467085a38a2d340bf550e03bd30 159B
.gitignore 395B
.gitignore 184B
HEAD 515B
HEAD 21B
ExcelDemo.iml 12KB
index 4KB
EtaoServiceImpl.java 7KB
GlobalExceptionHandler.java 6KB
GenericExcelDataListener.java 4KB
ExcelUtils.java 3KB
CommonResult.java 3KB
ResultCode.java 2KB
EtaoUser.java 1KB
FileDownloadController.java 1KB
EtaoUserExcel.java 1KB
FileUtil.java 1KB
EtoUserController.java 1KB
SexEnum.java 1KB
ExportEtaoUser.java 1KB
RoleEnum.java 1KB
BusinessException.java 415B
NotNullField.java 403B
EtaoService.java 400B
EtaoUserDao.java 369B
ExcelDemoApplication.java 332B
ExcelDemoApplicationTests.java 225B
main 336B
main 141B
main 41B
main 41B
HELP.md 448B
performance_schema.kIw0nw.meta 76B
information_schema.FNRwLQ.meta 76B
mysql.osA4Bg.meta 63B
sys.zb4BAA.meta 61B
dscp.PDEvAA.meta 7B
pre-rebase.sample 5KB
fsmonitor-watchman.sample 5KB
update.sample 4KB
push-to-checkout.sample 3KB
pre-commit.sample 2KB
prepare-commit-msg.sample 1KB
pre-push.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
共 221 条
- 1
- 2
- 3
资源评论
Zhang_Luke
- 粉丝: 50
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 51单片机学习(1)-软件keil下载
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
- Apache Flink 未授权访问+远程代码执行.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功