跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 综合服务 > 社群媒体 > Excel 导入导出(前端处理:xslx)(后端处理:hutool+poi || Easy Excel )

Excel 导入导出(前端处理:xslx)(后端处理:hutool+poi || Easy Excel )

时间:2024-03-30 17:31:03 来源:网络cs 作者:亙句 栏目:社群媒体 阅读:

标签: 处理 

 

目录

Excel 导入导出(前端处理:xslx)

代码示例

导入Excel数据

将数据封装好后传给后端 

导出数据

预览(vue-office/excel"……;docx-preview)

Excel 导入导出(后端处理:hutool+poi || Easy Excel )

前端

后端使用Hutool处理Excel 文件

Hutool-poi是针对Apache POI的封装,因此需要用户自行引入POI库

导入

如何给导出的excel表头设置中文?

 list里的对象有键值对,键为表头,值为表头下的内容


一、Excel 导入导出(前端处理:xslx)

调用文件对象的 arrayBuffer 方法读取文件,然后使用 xslx.read 方法解析数为 Excel 工作簿对象  readAsBinaryString readAsArrayBufferFileReader 对象的两种不同读取文件的方式:
创建 FileReader 对象。使用FileReader 对象的读取文件方法readAsBinaryString ,将文件读取为二进制字符串;或使用 readAsArrayBuffer 方法会将文件读取为二进制数据缓冲区,即ArrayBuffer对象。再使用 xslx.read 方法解析数据为 Excel 工作簿对象    

   3.下图为Excel 工作簿对象实例:

<vueofficeExcel v-if="excelSrc" :src="excelSrc" style="height:500px"></vueofficeExcel><input type="file" @change="change" />import vueofficeExcel from "@vue-office/excel";import vueofficedocx from "@vue-office/docx";import vueofficedpdf from "@vue-office/pdf";change(e) {  let _file = e.target.files[0]  const fr = new FileReader();  fr.readAsDataURL(_file);  fr.onload = (e) =>{    this.excelSrc = e.target.result;  }
let fr = new FileReader(); fr.readAsDataURL(file);let self = this;fr.onload = function () {  self.imgbase64 = fr.result}
<div ref="docxPreview"></div>import { renderAsync } from "docx-preview"let _file = e.target.files[0];//blob, arrayBufferrenderAsync(_file, this.$refs.docxPreview)

二、Excel 导入导出(后端处理:hutool+poi || Easy Excel )

1、前端
导入:前端直接返回给后端文件对象导出选中的或导出全部:将选中的id记录在ids数组里;根据ids数组长度判断是选中导出还是导出全部;

调用接口:

导出全部的可向后端传入ids.join(',')//把数组转成字符串

导出全部的传入用户名参数

handleImport(res, file, fileList) {  if (res.code === '200') {    this.$message.success("操作成功")    this.load(1)  } else {    this.$message.error(res.msg)  }},exportData() {   // 批量导出数据  if (!this.ids.length) {   // 没有选择行的时候,全部导出  或者根据我的搜索条件导出    window.open('http://localhost:9090/user/export?token=' + this.user.token + "&username="        + this.username + "&name=" + this.name)  } else {      // [1,2,3] => '1,2,3'//选中的导出    let idStr = this.ids.join(',')//把数组转成字符串    window.open('http://localhost:9090/user/export?token=' + this.user.token + '&ids=' + idStr)  }},

2、后端使用Hutool处理Excel 文件
Hutool-poi是针对Apache POI的封装,因此需要用户自行引入POI库
<dependency>  <groupId>cn.hutool</groupId>  <artifactId>hutool-all</artifactId>  <version>5.3.7</version> </dependency><dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi-ooxml</artifactId>  <version>5.2.3</version></dependency>
导入
@PostMapping("/import")public Result importData(MultipartFile file) throws IOException {    ExcelReader reader = ExcelUtil.getReader(file.getInputStream());    List<User> userList = reader.readAll(User.class);//读取所有数据并转成user类    // 写入数据到数据库    try {        userService.saveBatch(userList);    } catch (Exception e) {        e.printStackTrace();        return Result.error("数据批量导入错误");    }    return Result.success();}

ExcelUtil : Hutool-poi 模块中的一个工具类,用于处理 Excel 文件的读写。

通过 ExcelUtil.getReader(file.getInputStream()) 获取了一个 ExcelReader 对象使用 reader.readAll(User.class) 读取了 Excel 中的所有数据并将其转换为 User 类的对象列表。最后将这些对象列表通过 userService.saveBatch(userList) 写入到数据库中。

@GetMapping("/export")public void exportData(@RequestParam(required = false) String username,                       @RequestParam(required = false) String name,                       @RequestParam(required = false) String ids,//1,2,3,4                       HttpServletResponse response) throws IOException {    ExcelWriter writer = ExcelUtil.getWriter(true);    List<User> list;    QueryWrapper<User> queryWrapper = new QueryWrapper<>();    if (StrUtil.isNotBlank(ids)) {        // 将逗号分隔的字符串转换为整数列表:["1","2","3"]  =>[1,2,3]        List<Integer> idsArr1 = Arrays.stream(ids.split(regex ",")).map(Integer::value0f).collect(Collectors.tolist());        queryWrapper.in(column: "id", idsArr1);    } else {        // 第一种全部导出或者条件导出        queryWrapper.like(StrUtil.isNotBlank(username), column: "username", username);        queryWrapper.like(StrUtil.isNotBlank(name), column: "name", name);    }    list = userService.list(queryWrapper);    // 将查询到的用户数据写入 Excel    writer.write(list, true);//告知那些key是头,让后把key一样的value放在同一列    // 设置浏览器响应的格式response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户信息表", "UTF-8") + ".xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);out.close();writer.close();}

判断前端是否有传过来ids,有就将其转成数组并queryWrapper查询出,没有就根据其他条件查询出数据列表

创建 ExcelWriter 对象,参数为是否是 XLSX 格式将查询到的用户数据写入 Excel,并告知那些key是表头,让后把key一样的value放在同一列设置浏览器响应的格式和文件名通过 writer.flush(out, true) 将 Excel 数据输出到浏览器。最后关闭输出流和 ExcelWriter 对象
如何给导出的excel表头设置中文?

只需要在实体类的属性上面加一个注解 @Alias("中文")

 list里的对象有键值对,键为表头,值为表头下的内容

 查询出来的list里是一条条user对象,所以有键值对

Excel生成-ExcelWriter | Hutool

map数据的写法 

@GetMapping("/export")public void exportData(@RequestParam(required = false) String username,                       @RequestParam(required = false) String name,                       @RequestParam(required = false) String ids,//1,2,3,4                       HttpServletResponse response) throws IOException {    ExcelWriter writer = ExcelUtil.getWriter(true);    List<User> list;    QueryWrapper<User> queryWrapper = new QueryWrapper<>();    if (StrUtil.isNotBlank(ids)) {        // 将逗号分隔的字符串转换为整数列表:["1","2","3"]  =>[1,2,3]        List<Integer> idsArr1 = Arrays.stream(ids.split(regex ",")).map(Integer::value0f).collect(Collectors.tolist());        queryWrapper.in(column: "id", idsArr1);    } else {        // 第一种全部导出或者条件导出        queryWrapper.like(StrUtil.isNotBlank(username), column: "username", username);        queryWrapper.like(StrUtil.isNotBlank(name), column: "name", name);    }    list = userService.list(queryWrapper);    // 将查询到的用户数据写入 Excel    writer.write(list, true);//告知那些key是头,让后把key一样的value放在同一列    // 设置浏览器响应的格式response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户信息表", "UTF-8") + ".xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);out.close();writer.close();}@PostMapping("/import")public Result importData(MultipartFile file) throws IOException {    ExcelReader reader = ExcelUtil.getReader(file.getInputStream());    List<User> userList = reader.readAll(User.class);//读取所有数据并转成user类    // 写入数据到数据库    try {        userService.saveBatch(userList);    } catch (Exception e) {        e.printStackTrace();        return Result.error("数据批量导入错误");    }    return Result.success();}

本文链接:https://www.kjpai.cn/news/2024-03-30/151057.html,文章来源:网络cs,作者:亙句,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论