easyexcel的读写操作

easyexcel是基于java的读写excel的开源项目 --读写也可理解为上传和下载

写操作

一、引入依赖

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version>
</dependency>

二、封装相应对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExcelDemo {@ExcelProperty(value = "姓名")    //标记excel的标题内容private  String name;@ExcelProperty(value = "年龄")private Integer age;@ExcelIgnore    //标记该属性不写入表格private String sex;
}

三、通过eayexcel完成写入的操作

public class TestWrite{public static void main(String[] args){String fileName = "表格要保存的地址\保存后的文件名称";	//例:D:\projeck\新建文件夹\a.xlsxList<ExcelDemo> data = new ArrayList();data.add(new ExcelDemo("aaa",18,"男"));data.add(new ExcelDemo("bbb",13,"女"));EasyExcel.write(fileName, ExcelDemo.class).sheet("表格的工程名").doWrite(data);}
}

web页面实现写操作

@Controller
public class ExcelController{@GetMapping("download")public void download(HttpServletResponse response) throws IOException{response.setContenType("application/vnd.opencmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");//这里的URLEncoder.encode用来防止中文乱码String fileName = URLEncoder.encode("下载的文件名", "UTF-8").replaceALL("\\+","%28");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + filename = ".xlsx");List<ExcelDemo> data = new ArrayList();data.add(new ExcelDemo("aaa",18,"男"));data.add(new ExcelDemo("bbb",13,"女"));EasyExcel.write(response.getOutputStream(), ExcelDemo.class).sheet("表格的工程名").doWrite(data);}
}

读操作

一、监听器

@Slf4j
public class DemoDataListener implements ReadListener<ExcelDemo>{
private static final int BATCH_COUNT = 100;	//每100条存储数据库,然后清理list
private List<ExcelDemo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);//数据缓存
private DemoDAO demoDAO;	//这个可以是一个dao,如果有业务逻辑也可以是service
public DemoDataListener(){demoDAO = new DemoDAO();	//因为这里是dao所以随便new一个
}
public DemoDataListener(){this.demoDAO = demoDAO;	//如果使用的是spring,使用这个构造方法,每次创建Listener需要传入spring管理类
}
@Override
//每条数据解析都会调用这个方法
public void invoke(ExcelDemo data, AnalysisContext context){sout(JSON.toJSONString(data));if(cachedDataList.size() >= BATCH_COUNT){	//达到BATCH_COUNT的数量需要存储一次数据库,防止数据过多损坏saveData();cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);	//存储完成清理list}
}
@Override
//所有数据解析完成后调用
public void doAfterAllAnalysed(AnalysisContext context){saveData();	//这里保存数据确保最后遗留的数据也会存储到数据库
}
//存储数据库
private void saveData(){demoDAO.sava(cachedDataList);
}
}

二、持久层dao

public class DemoDAO{
public void save(List<ExcelDemo> list){//自己写一个mapper,新增一个方法batchInsert,将数据放入数据库
}
}

三、测试

public class TestReadDemo{
psvm{String fileName = "将要读取的文件存放的地址";	//例:D:\projeck\新建文件夹\a.xlsx//默认读取第一个sheetEasyExcel.red(fileName, ExcelDemo.class, new DemoDataListener()).sheet().doRead();
}
}

web页面实现读操作

  1. 引入依赖
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
    </dependency>
  2. 文件上传解析器
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="1000000000"/>
    </bean>
  3. Controller层
    @Autowired
    private DemoDAO demoDAO;	//注入dao层,未来根据业务逻辑也可以注入service
    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException{
    EasyExcel.read(file.getInputStream(), ExcelDemo.class, new DemoDataListener(demoDAO)).sheet().doRead();
    return "success";
    }

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

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

相关文章

力扣 19删除链表倒数第N个结点

思路 双指针法&#xff0c;快指针用于与慢指针拉开距离&#xff0c;慢指针用于删除元素&#xff0c;越过慢指针后面的元素。 具体删除时&#xff0c;应该注意如果倒数第N个结点是头结点的话&#xff0c;slow指向的就是头结点&#xff0c;没有吧办法用 slow->next slow-&…

sql_exporter通过sql收集业务数据并通过prometheus+grafana展示

下载并解压安装sql_exporter wget https://github.com/free/sql_exporter/releases/download/0.5/sql_exporter-0.5.linux-amd64.tar.gz #解压 tar xvf sql_exporter-0.5.linux-amd64.tar.gz -C /usr/local/修改主配置文件 cd /usr/local/ mv sql_exporter-0.5.linux-amd64 s…

Electron 的open-file事件

在 Electron 中,open-file 事件是一个重要的事件,它允许开发者在应用程序已经运行的情况下,通过文件打开请求(如双击文件或在命令行中使用 open 命令打开文件)来捕获文件路径。以下是对 open-file 事件的详细解析: 触发条件 应用已经打开。用户通过双击与应用程序关联的…

google 浏览器插件开发简单学习案例:TodoList

参考&#xff1a; google插件支持&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/140412993 这里是把前面做的TodoList做成google插件&#xff0c;具体网页可以参考下面链接 TodoList网页&#xff1a; https://blog.csdn.net/weixin_42357472/article/de…

SwiftSage:参考人脑双系统,结合快思和慢想的智能体,解决复杂任务同时降低成本

SwiftSage&#xff1a;参考人脑双系统&#xff0c;结合快思和慢想的智能体&#xff0c;解决复杂任务同时降低成本 提出背景解法拆解子解法1&#xff1a;SWIFT模块子解法2&#xff1a;SAGE模块模块整合和决策树 SwiftSage 工作流程效果 论文&#xff1a;SWIFTSAGE: A Generative…

5G赋能新能源,工业5G路由器实现充电桩远程高效管理

随着5G技术的广泛应用&#xff0c;新能源充电桩的5G应用正逐步构建起全新的生态系统。在数字化转型的浪潮中&#xff0c;新能源充电桩行业正迎来数字化改革。工业5G路由器的引入&#xff0c;为充电桩的远程管理提供了强有力的技术支持&#xff0c;新能源充电桩5G路由器网络部署…

共享充电桩语音ic方案,展现它的“说话”的能力

随着电动汽车的普及&#xff0c;充电设施的便捷性、智能化需求日益凸显&#xff0c;共享充电桩语音IC应运而生&#xff0c;成为连接人与机器、实现智能交互的桥梁。本文将为大家介绍共享充电桩语音ic的概述、应用词条以及优势&#xff0c;希望能够帮助您。 一、NV170D语音ic概述…

选购指南:如何挑选最适合的快手矩阵系统

在短视频风潮席卷的今天&#xff0c;快手作为其中的佼佼者&#xff0c;吸引了无数创作者和商家的目光。然而&#xff0c;想要在快手上脱颖而出&#xff0c;仅凭内容和创意是远远不够的。一个强大且适合的快手矩阵系统&#xff0c;将是你通往成功的重要钥匙。那么&#xff0c;如…

SEO域名外链生成工具PHP源码

两款不同版本的SEO超级外链工具PHP源码&#xff0c;网址外链-seo外链推广工具源码&#xff0c;SEO网站推广外链工具源码SEO域名外链生成工具PHP源码 _ 博客趣两款不同版本的SEO超级外链工具PHP源码&#xff0c;网址外链-seo外链推广工具源码&#xff0c;SEO网站推广外链工具源码…

Web前端:HTML篇(一)

HTML简介&#xff1a; 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。 您可以使用 HTML 来建立自己的 WEB 站点&#xff0c;HTML 运行在浏览器上&#xff0c;由浏览器…

批量打断相交线——ArcGISpro 解决方法

在数据处理&#xff0c;特别是地理空间数据处理或是任何涉及图形和线条分析的场景中&#xff0c;有时候需要把相交的线全部从交点打断一个常见的需求。这个过程对于后续的分析、编辑、或是可视化展现都至关重要&#xff0c;因为它可以确保每条线都是独立的&#xff0c;避免了因…

.NET下支持多框架的托盘功能NotifyIconEx(WPF / WinForms / Avalonia / WinUI / MAUI / Wice)

支持 WPF / WinForms / Avalonia / WinUI / MAUI / Wice 应用。 先看效果&#xff1a; using NotifyIconEx;var notifyIcon new NotifyIcon() {Text "NotifyIcon",Icon Icon.ExtractAssociatedIcon(Process.GetCurrentProcess().MainModule?.FileName!)! }; not…

【论文速读】| LLMCloudHunter:利用大语言模型(LLMs)从基于云的网络威胁情报(CTI)中自动提取检测规则

本次分享论文&#xff1a;LLMCloudHunter: Harnessing LLMs for Automated Extraction of Detection Rules from Cloud-Based CTI 基本信息 原文作者&#xff1a;Yuval Schwartz, Lavi Benshimol, Dudu Mimran, Yuval Elovici, Asaf Shabtai 作者单位&#xff1a;Ben-Gurion…

golang长连接的误用

误用一&#xff1a;忘记读取响应的body 由于忘记读取响应的body导致创建大量处于TIME_WAIT状态的连接&#xff08;同时产生大量处于transport.go的readLoop和writeLoop的协程&#xff09; 在linux下运行下面的代码: package mainimport ("fmt""html"&qu…

第一弹:基于ABAP OLE技术实现对服务器文件进行读写操作

前言 最近遇到这样一个需求&#xff0c;需要对BW服务器上的文件进行下载的同时写入每个用户相对应的数据。之前的服务器模版是一个死模版&#xff0c;对于这样的要求&#xff0c;我就想到了OLE技术&#xff0c;那么什么是OLE技术呢&#xff1f; 一、什么是OLE技术&#xff1f…

Python 全栈体系【三阶】(三)

第一章 Django 七、静态文件 1. 概述 静态文件是指在WEB应用中的图像文件、CSS文件、Javascript文件。 2. 静态文件的配置 settings.py中关于静态文件的配置如下&#xff1a; STATICFILES_DIRS [BASE_DIR , static, ]STATIC_URL /static/其中&#xff1a; STATICFILES…

微服务架构下Mojo模型的创新应用:细粒度服务与智能优化

微服务架构下Mojo模型的创新应用&#xff1a;细粒度服务与智能优化 在当今快速发展的云计算和大数据时代&#xff0c;微服务架构以其灵活性、可扩展性和易于维护的特点&#xff0c;成为软件开发的主流趋势。Mojo模型&#xff0c;作为机器学习领域中的一种技术&#xff0c;通过…

C++——模板初阶 | STL简介

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

便携气象站:科技助力气象观测

在科技飞速发展的今天&#xff0c;便携气象站以其轻便、高效、全面的特点&#xff0c;正逐渐改变着气象观测的传统模式。这款小巧而强大的设备&#xff0c;不仅为气象学研究和气象灾害预警提供了有力支持&#xff0c;更为户外活动、农业生产等领域带来了诸多便利。 便携气象站是…

vscode anaconda jupyternotebook R Python配置

vscode anaconda jupyternotebook R Python配置 anaconda 官网下载安装vscode官网下载安装、jupyternotebook设置vscode基于python运行jupyternotebook其中python设置的是本地环境vscode基于r运行jupyternotebook4. 4.1下载R&#xff0c;可更改R工作目录 4.2 vscode的R扩展可以…