POI方式实现Excel表格数据导出
Excel表格导出
1.添加pom依赖
1 <!-- office 操作工具 -->
2 <dependency>
3 <groupId>org.apache.poi</groupId>
4 <artifactId>poi</artifactId>
5 <version>3.17</version>
6 </dependency>
7 <dependency>
8 <groupId>org.apache.poi</groupId>
9 <artifactId>poi-ooxml</artifactId>
10 <version>3.17</version>
11 </dependency>
12
13 <dependency>
14 <groupId>org.apache.poi</groupId>
15 <artifactId>poi-scratchpad</artifactId>
16 <version>3.17</version>
17 </dependency>
2.编写导出Excel的工具类
1 public class MyExcelUtils {
2 /**
3 * @param titles 表头
4 * @param out
5 * @param listMap 数据
6 * @param keys 数据库字段(与表头相对应)
7 */
8 public static void export(String[] titles, ServletOutputStream out, List<Map<String, Object>> listMap, String[] keys) {
9 try {
10 //1.创建一个workbook,对应一个Excel文件
11 HSSFWorkbook workbook = new HSSFWorkbook();
12 //2.在workbook中添加一个sheet,对应Excel文件中的sheet
13 HSSFSheet hssfSheet = workbook.createSheet("列表1");
14 //3.在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
15 HSSFRow row = hssfSheet.createRow(0);
16 //4.创建单元格 设置表单 居中
17 HSSFCellStyle hssfCellStyle = workbook.createCellStyle();
18 HSSFCell hssfCell = null;
19 for (int i = 0; i < titles.length; i++) {
20 hssfCell = row.createCell(i);//列索引从0开始
21 hssfCell.setCellValue(titles[i]);//列名1
22 hssfCell.setCellStyle(hssfCellStyle);//列居中显示
23 }
24 //5.填充数据
25 for (int i = 0; i < listMap.size(); i++) { //行数
26 row = hssfSheet.createRow(i + 1); // 表数据的起始行数为 1
27 //数据库数据
28 Map<String, Object> map = listMap.get(i);
29 for (int j = 0; j < titles.length; j++) { //列数
30 row.createCell(j).setCellValue((String) map.get(keys[j]));
31 }
32 }
33 // 6.将文件输出到客户端浏览器
34 try {
35 workbook.write(out);
36 out.flush();
37 out.close();
38 } catch (Exception e) {
39 e.printStackTrace();
40 }
41 } catch (Exception e) {
42 e.printStackTrace();
43 }
44 }
45 }
3.后端Controller实现(Controller参数: HttpServletResponse response)
为保证Excel表格的表头和其列值相匹配,采用两个数组进行一一对应(或使用Map)
1 //Excel表头、文件名(titles的长度和xml中sql查询的字段个数(keys长度)一致)
2 String[] titles = {"编号", "姓名", "年龄"};
3 //Excel文件名
4 String name = "Excel表格下载";
5 //数据库对应字段
6 String[] keys = {"id", "name", "age"};
7
8 response.setContentType("application/binary;charset=UTF-8");
9 try {
10 ServletOutputStream out = response.getOutputStream();
11 try {
12 //设置文件头:一个参数是设置下载文件名
13 response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(name + ".xls", "UTF-8"));
14 } catch (UnsupportedEncodingException e1) {
15 e1.printStackTrace();
16 }
17 // 数据库对应的需要导出的Excel数据
18 List<Map<String, Object>> listMap = exportExcelDAO.exportExcelData();
19 // MyExcelUtils下载Excel
20 MyExcelUtils.export(titles, out, listMap, keys);
21 } catch (Exception e) {
22 e.printStackTrace();
23 }
POI方式实现Excel表格数据导出的更多相关文章
- 将页面中表格数据导出excel格式的文件(vue)
近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...
- Vue+element UI实现表格数据导出Excel组件
介绍 这是一个可以将页面中的表格数据导出为Excel文件的功能组件,该组件一般与表格一起使用,将表格数据传给组件,然后通过点击组件按钮可将表格中的数据导出成Excel文件. 使用方法 由于封装该组件内 ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- 前端 vue表格数据导出Excel 文件实现
实现思路 使用json2csv将后台json数据转化为csv格式数据 采用创建Blob(二进制大对象)的方式来存放缓存数据: 生成下载链接: 创建一个a标签,设置href和download属性 触发a ...
- java的excel表格的导出与下载
今天做一个java对excel表格的导出和下载的时候,从网络上搜寻了下载的模板,代码如下: 控制层: @RequestMapping(value = "excelOut_identifier ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- 前端Excel表格导入导出,包括合并单元格,表格自定义样式等
表格数据导入 读取导入Excel表格数据这里采用的是 xlsx 插件 npm i xlsx 读取excel需要通过 XLSX.read(data, {type: type}) 方法来实现,返回一个叫W ...
- jxl读取Excel表格数据
调用jxl包实现Excel表格数据的读取,代码如下: import java.io.File; import java.io.IOException; import java.util.ArrayLi ...
- 将包含经纬度点位信息的Excel表格数据导入到ArcMap中并输出成shapefile
将包含经纬信息的Excel表格数据,导入到ArcMap中并输出成shapefile,再进行后面的操作.使用这种方法可以将每一个包含经纬信息的数据在ArcMap中点出来. 一.准备数据 新建Excel表 ...
- JAVA处理Excel表格数据并写入数据库
package com.hncj.test; import java.io.FileInputStream; import java.sql.Connection; import java.sql.D ...
随机推荐
- MindSpore分布式并行训练 (GPU-Docker)mindspore—1.2.1—gpu—docker版本运行报错,Failed to init nccl communicator for group,init nccl communicator for group nccl_world_group
如题目所述: 计算框架MindSpore分布式并行训练报错,具体版本:docker-gpu-1.2.1 运行环境: 硬件:Intel CPU, 4卡泰坦 软件:Ubuntu18.04宿主机,docke ...
- lua环境配置与编译
1.背景 2.安装lua 官方下载地址:https://joedf.ahkscript.org/LuaBuilds/ 下载后解压即可 解压后: 配置环境变量: 检查是否安装成功: 如果能输出版本号,则 ...
- MFC制作带界面的DLL库
## MFC如何创建一个带界面的DLL(动态链接库) 1.创建项目 打开VS,文件->新建->项目: 点击确定之后弹出来的界面,点击下一步->选择"使用共享MFC DLL的 ...
- SMU Summer 2024 Contest Round 8
SMU Summer 2024 Contest Round 8 Product 思路 注意到 \(\prod\limits_{i=1}^NL_i\le10^5\),也就是说 N 不会超过 16,因为 ...
- AtCoder Beginner Contest 327 D
AtCoder Beginner Contest 327D D - Good Tuple Problem (atcoder.jp)(种类并查集,二分图染色) 算法学习笔记(7):种类并查集 附上典题: ...
- SMU Summer 2023 Contest Round 11(2022-2023 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2022))
SMU Summer 2023 Contest Round 11(2022-2023 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2022 ...
- MPTCP(二):MPTCP版本说明
MPTCP版本说明 简介 参考链接 https://github.com/multipath-tcp/mptcp_net-next/wiki MPTCP的两个版本 MPTCPv0: 在5.6之前的li ...
- SQL中解决i+1 & values中插入变量
基于JDBC环境下使用mysql插入数据的一些小问题 下方代码用于实现 批量向数据库中插入数据 一般为"垃圾"数据 代码例子实现i+1的效果 i=1 i+1=2 for (int ...
- Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404
Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404 在学习共享库时使用通过git拉取jenkin ...
- 合合信息亮相新加坡科技周——Big Data & AI World Expo展示AI驱动文档数字化的前沿能力
合合信息亮相新加坡科技周--Big Data & AI World Expo展示AI驱动文档数字化的前沿能力 展会规模背景: 2023年10月11日-12日,合合信息在TECH WEEK ...