easyexcel使用教程--导入导出简单案例

news2024/11/16 21:43:09

java中操作excel的库是poi,但是poi有很多问题,使用复杂,内存占用大等,阿里开源了一个操作excel的库叫easyexcel,它基于poi做了很多优化,平时读写excel建议使用这个库

文档地址: 关于Easyexcel | Easy Excel 官网

写入excel 

在实体类上写excel字段注解,ExcelProperty注解就是导出的列名,ExcelIgnoreUnannotated表示没加ExcelProperty注解的字段不会写入

@ExcelIgnoreUnannotated
@Getter
@Setter
@Schema(name = "User", description = "用户")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ExcelProperty("姓名")
    @Schema(description = "姓名")
    private String name;

    @ExcelProperty("金币数量")
    @Schema(description = "金币数量")
    private Integer coinNum;
}
    public void testWriteExcel() {
        String fileName = "d:/aaa.xlsx";
        List<User> users = new ArrayList<>();
        User user = new User();
        user.setName("张三");
        user.setCoinNum(100);
        users.add(user);
        user = new User();
        user.setName("李四");
        user.setCoinNum(200);
        users.add(user);
        // 写入本地excel文件
        EasyExcel.write(fileName, User.class)
                .sheet("模板")
                .doWrite(() -> {
                    // 返回写入的数据
                    return users;
                });
    }

可以看到,excel数据成功写入了,但是标题换行了,如果想标题不换行可以指定列宽,使用ColumnWidth注解,加在类上面表示所有列宽度都是这个数值,也可以加到指定字段上

 导出excel

写法跟写入excel差不多,这里加了个出错返回json,这样出错了前端可以给出提示

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        // 导出excel如果失败会返回json
        try {
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            // 这里需要设置不关闭流,这样失败了可以返回json
            EasyExcel.write(response.getOutputStream(), User.class).autoCloseStream(Boolean.FALSE).sheet("模板")
                    .doWrite(userService.list());
        } catch (Exception e) {
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Map<String, String> map = MapUtils.newHashMap();
            map.put("status", "failure");
            map.put("message", "下载文件失败" + e.getMessage());
            response.getWriter().println(JSON.toJSONString(map));
        }
    }
}

读取excel

这里推荐使用PageRead,默认一次读取100条

    @Test
    public void testPageRead() {
        String fileName = "d:/aaa.xlsx";
        // 这里默认每次会读取100条数据
        // 具体需要返回多少行可以在`PageReadListener`的构造函数设置
        EasyExcel.read(fileName, User.class, new PageReadListener<User>(dataList -> {
            for (User demoData : dataList) {
                log.info("读取到一条数据{}", JSON.toJSONString(demoData));
            }
        })).sheet().doRead();
    }

导入excel

导入也跟读取excel类似,使用MultipartFile接收excel文件,使用PageReadListener读取数据

@RestController
@RequestMapping("/user")
public class UserController extends BaseController {
    @Autowired
    private UserService userService;

    @PostMapping("upload")
    public Result upload(@RequestPart MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), User.class, new PageReadListener<User>(users -> {
            userService.saveBatch(users);
        })).sheet().doRead();
        return resultOk();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作无法完成错误0x000006ba?教你几种全面解析与解决方案指南

错误代码0x000006ba通常与 Windows 操作系统中的远程过程调用&#xff08;RPC&#xff09;服务有关。当你在尝试执行某些操作&#xff0c;如连接到网络共享、运行某些网络服务或使用依赖于 RPC 的应用程序时&#xff0c;可能会遇到这个错误。接下来就和大家聊聊操作无法完成错误…

“揭秘CentosChina爬虫项目:掌握Scrapy框架的必备技巧与数据库设计“

Centoschina 项目要求 爬取centoschina_cn的所有问题&#xff0c;包括文章标题和内容 数据库表设计 库表设计&#xff1a; 数据展示&#xff1a; 项目亮点 低耦合&#xff0c;高内聚。 爬虫专有settings custom_settings custom_settings_for_centoschina_cncustom_settin…

鸿蒙(API 12 Beta2版)媒体开发【使用OHAudio开发音频播放功能(C/C++)】

OHAudio是系统在API version 10中引入的一套C API&#xff0c;此API在设计上实现归一&#xff0c;同时支持普通音频通路和低时延通路。仅支持PCM格式&#xff0c;适用于依赖Native层实现音频输出功能的场景。 使用入门 开发者要使用OHAudio提供的播放或者录制能力&#xff0c…

根据 IP 地址配置子网示例(下挂 hub 接不同 vlan 终端)

我们一般根据端口配置子网比较简单&#xff0c;但是如果换接口&#xff0c;就又要到交换机上重新配置端口所属 vlan 了&#xff0c;紧急情况下&#xff0c;还是比较耽误时间的。但如果根据IP地址配置 vlan&#xff0c;则可以插在交换机上任意端口&#xff0c;排障时比较节省时间…

部分PC制造商不会帮助英特尔第13/14代酷睿延保 对用户来说可能是个问题

早前英特尔已经宣布大部分第 13/14 代酷睿桌面处理器将可以获得延长保修服务&#xff0c;即后续使用出现非人为损坏的问题后&#xff0c;用户都可以联系英特尔换一颗新处理器。然而英特尔承担责任不代表对用户来说就高枕无忧&#xff0c;例如只有盒装版处理器才能直接联系英特尔…

MySQL数据库分区

文章目录 1. 分区的基本概念2. 分区的类型3. 在 MySQL 中实现分区3.1 创建分区表3.2 插入数据3.3 查询数据3.4 修改分区3.5 查看分区信息 4. 具体示例4.1 范围分区 (Range Partitioning)4.2 列表分区 (List Partitioning)4.3 哈希分区 (Hash Partitioning)4.4 键分区 (Key Part…

Win32注册表操作

注册表的概念 注册表是一个存储计算机配置信息的数据库&#xff0c;用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。 注册表结构 运行Regedi…

【Redis 进阶】Redis 典型应用 —— 分布式锁

一、什么是分布式锁 在一个分布式的系统中&#xff0c;也会涉及到多个节点访问同一个公共资源的情况&#xff0c;此时就需要通过锁来做互斥控制, 避免出现类似于 “线程安全” 的问题。 而 Java 的 synchronized 或者 C 的 std::mutex&#xff0c;这样的锁都是只能在当前进程…

Embedding技术之Word Embedding

Word Embedding是什么&#xff1f; Word Embedding——词嵌入是将单词映射为数值向量&#xff0c;以捕捉单词间的语义和句法关系&#xff0c;为自然语言处理任务提供有效的特征表示。——自然语言处理——Word2Vec、GloVe、FastText。 Word Embedding属于静态向量&#xff0c…

深度学习入门(四):激活函数与LSTM

激活函数 激活函数在神经网络中扮演着至关重要的角色。它们的主要功能是引入非线性因素&#xff0c;这使得神经网络能够学习和近似任何非线性函数&#xff0c;从而处理复杂的数据模式和决策边界。如果没有激活函数&#xff0c;即使网络拥有很多层&#xff0c;其表达能力仍然只…

青岛国真携手图扑软件共建青岛西海岸区一网统管平台

为深入贯彻关于垃圾分类的重要指示精神&#xff0c;积极响应住房和城乡建设部开展的全国城市生活垃圾分类宣传周活动&#xff0c;5 月 25 - 27 日&#xff0c;以“发挥行业协会新动能 助力垃圾分类新时尚”为主题的“ 2023 垃圾分类高峰论坛”在青岛西海岸成功举办。 青岛国真智…

使用影子凭证进行域权限维持

本文来源无问社区&#xff0c;更对实战内容&#xff0c;渗透思路可前往查看http://wwlib.cn/index.php/artread/artid/15293.html Microsoft 推出了 Windows Hello 企业版 &#xff08;WHfB&#xff09;&#xff0c;以使用基于密钥的信任模型替换传统的基于密码的身份验证。此…

【Material-UI】按钮组:尺寸与颜色详解

文章目录 一、按钮组概述1. 组件介绍2. 基本用法 二、按钮组的尺寸&#xff08;Sizes&#xff09;1. 小尺寸&#xff08;Small&#xff09;2. 中等尺寸&#xff08;Medium&#xff09;3. 大尺寸&#xff08;Large&#xff09; 三、按钮组的颜色&#xff08;Colors&#xff09;1…

gitea docker 快捷安装部署

前言 在前一篇博文&#xff08;什么是 Gitea&#xff1f;&#xff09;中&#xff0c;我们详细介绍了gitea的功能特性&#xff0c;以及其与其它git服务器之间的特性多维度对比。 在本文中&#xff0c;我们将详细介绍gitea的快捷安装部署&#xff0c;docker方式&#xff01; 1…

qt客户端与服务端通信

服务器要一处于监听状态 客户端主动连接服务器 服务器的ui界面 客户端的ui界面 很简陋 服务端listen 按钮的槽函数 QHostAddress::Any,port 监听任何端口 void MainWindow::on_listen_clicked() {if(ui->lineEdit->text().isEmpty()){return ;}int port ui->li…

【第九节】python中xml解析和json编解码

目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…

Python新手错误集锦(PyCharm)

# 自学Python&#xff0c;用Pycharm作环境。我这个手新到这时我学习的第一个编程软件&#xff0c;且本人专业是化学&#xff0c;以前对电脑最高级的使用是玩扫雷游戏。所以这里集合的错误都是小透明错误&#xff0c;大部分人请绕道。不断更新中...... 缩进错误 记住“indent”…

Jmeter之BeanShell使用(全网最详细的介绍)-第九天

一.什么是BeanShell Java写成的⼩型、免费的Java源代码解释器可以执⾏标准Java语句和表达式,完全符合java语法的java脚本语⾔&#xff08;需要会javase语⾔&#xff09;包括⼀些脚本命令&#xff0c;有⾃⼰的⼀些语法和⽅法&#xff0c;是⼀种松散类型的脚本语⾔&#xff08;这…

静电消除器的产品功能介绍

省维护&#xff1a;超高等级 冲击波可引起空间隔断&#xff0c;从而将外部空气的进入降至最低。与以往的针尖保护构造相比&#xff0c;通过形成绝对的空气屏障&#xff0c;实现了低流量且惊人的省维护性能。 大范围消除静电 配备了 Hi-Power I.C.C. 系统&#xff0c;除了可根据…

普通话水平测试证书真的有用吗?

对于部分考生而言报名普通话水平测试只是随大流&#xff0c;看周围同学都考了&#xff0c;自己也来报名。还有一些呢是看到博主总结哪些证好考有用&#xff0c;先拿下再说但是并不知道具体有什么用。那么&#xff0c;普通话水平测试证书&#xff0c;究竟能为我们带来什么呢&…