可以使用hutool的ExcelUtil工具。
在项目中加入以下依赖:
<dependency>
<groupId>cn.hutoolgroupId>
<artifactId>hutool-allartifactId>
<version>5.8.16version>
dependency>
// 批量导入用户
@Log("批量导入用户")
@ApiOperation("批量导入用户")
@PostMapping("/loadtocreate")
public ResultVO loadtocreate(MultipartFile file) throws IOException {
// 获取文件扩展名,不带 .
String extensionName = FileUtil.getExtensionName(file.getOriginalFilename());
if (!extensionName.equals("xls") && !extensionName.equals("xlsx")) {
return new ResultVO(211, "批量导入请上传excel表格文件");
}
ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
reader.addHeaderAlias("用户名", "username");
reader.addHeaderAlias("昵称", "nickName");
reader.addHeaderAlias("电话", "phone");
reader.addHeaderAlias("邮箱", "email");
reader.addHeaderAlias("性别", "gender");
List<UserOfExcel> list = reader.readAll(UserOfExcel.class);
Long orgId = SecurityUtils.getCurrentUserOrgId();
Org org = new Org();
org.setId(orgId);
Set<Role> roles = new HashSet<>();
Role role = new Role();
// 普通用户
role.setId(2L);
roles.add(role);
List<User> users = new ArrayList<>();
for (UserOfExcel userOfExcel : list) {
User user = new User();
BeanUtils.copyProperties(userOfExcel, user);
user.setPassword(passwordEncoder.encode("123456"));
user.setIsAuth(true);
user.setOrg(org);
user.setRoles(roles);
user.setEnabled(true);
users.add(user);
}
userService.createAll(users);
return new ResultVO(200, "导入成功");
}
// FileUtill类方法:获取文件扩展名,不带 .
public static String getExtensionName(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length() - 1))) {
return filename.substring(dot + 1);
}
}
return filename;
}
主要代码:
文件流读取xls或者xlsx文件,然后通过设置表头字段,将每一行数据转换成一个java对象,最后导出成List
ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
reader.addHeaderAlias("用户名", "username");
reader.addHeaderAlias("昵称", "nickName");
reader.addHeaderAlias("电话", "phone");
reader.addHeaderAlias("邮箱", "email");
reader.addHeaderAlias("性别", "gender");
List<UserOfExcel> list = reader.readAll(UserOfExcel.class);
@Override
public void download(List<FeedbackDto> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (FeedbackDto feedbackDto : queryAll) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("反馈内容", feedbackDto.getContent());
map.put("反馈类型", feedbackDto.getType());
map.put("设备ID", feedbackDto.getSysId());
map.put("用户联系方式", feedbackDto.getUserId());
map.put("openid", feedbackDto.getOpenId());
map.put("反馈资料", feedbackWebPath + "preview?id=" + feedbackDto.getId());
map.put("反馈时间", feedbackDto.getTime());
list.add(map);
}
// 导出excel
FileUtil.downloadExcel(list, response);
}
/**
* 导出excel
*/
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
// 文件名
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
File file = new File(tempPath);
BigExcelWriter writer = ExcelUtil.getBigWriter(file);
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(list, true);
//response为HttpServletResponse对象
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
ServletOutputStream out = response.getOutputStream();
// 终止后删除临时文件
file.deleteOnExit();
writer.flush(out, true);
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
java数据导出成excel表格的的关键操作:
1、将Java对象List转换成List
ImageCombiner是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于合成水印也可以),素材上支持图片、文本、矩形三种,支持定位、缩放、旋转、圆角、透明度、颜色、字体、字号、删除线、居中绘制、文本自动换行等特性,足够覆盖图片合成的日常需求。
在项目中加入以下依赖:
<dependency>
<groupId>com.freewaysogroupId>
<artifactId>image-combinerartifactId>
<version>2.6.3version>
dependency>
示例合成海报代码:
海报背景 + 二维码 + 头像图片
public static String MergeImage2(String qrCodeUrl, String headImgUrl, String filename) throws Exception {
// 背景图
String bgImagePath = "https://img-blog.csdnimg.cn/fff475d24c8d47cf893528b508c60941.jpeg";
//头像图片
BufferedImage avatar = ImageIO.read(new URL(headImgUrl));
BufferedImage bgImage = ImageIO.read(new URL(bgImagePath));
//合成器和背景图(整个图片的宽高和相关计算依赖于背景图,所以背景图的大小是个基准)
ImageCombiner combiner = new ImageCombiner(bgImage, OutputFormat.PNG);
combiner.setBackgroundBlur(0); //设置背景高斯模糊(毛玻璃效果)
combiner.setCanvasRoundCorner(0); //设置整图圆角(输出格式必须为PNG)
//头像(圆角设置一定的大小,可以把头像变成圆的)
combiner.addImageElement(avatar, 503, 1200, 186, 186, ZoomMode.WidthHeight)
.setRoundCorner(10)
.setBlur(0); //高斯模糊,毛玻璃效果
//二维码(强制按指定宽度、高度缩放)
combiner.addImageElement(ImageIO.read(new URL(qrCodeUrl)), 138, 1200, 186, 186, ZoomMode.WidthHeight).setRoundCorner(10);
//执行图片合并
combiner.combine();
//保存文件
String path = "D:\\img\\" + filename + "_full.png";
combiner.save(path);
return path;
}
@Test
public static void main(String[] args) throws Exception {
String qrCodeUrl = "http://qiniu.qkongtao.cn/2020/03/weixin.jpg";
String headImgUrl = "https://img-blog.csdnimg.cn/7c11e9a1b5764fa3b612545b65bf00e6.png";
String path = MergeImage2(qrCodeUrl, headImgUrl, "111111111");
System.out.println(path);
}
image-combiner图像处理项目具体源码和教程可以看开源项目:https://gitee.com/dromara/image-combiner