浏览器导出excel

做java web项目时,经常遇到需要在页面上点击导出按钮,然后直浏览器接下载下来一个excel文档。

比如一个List<Person>的集合,需要将每个Person当做一行,输出到excel中去。其中Person实体类如下:

import lombok.Data;/*** className Person* description** @author * @version 1.0* @date **/
@Data
public class Person {/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 性别*/private Integer sex;/*** 身份证号*/private String certificateNumber;/*** 手机号*/private String phoneNumber;
}

可以使用 HttpServletResponse 实现浏览器下载,写一个ExcelUtils,如下:

import com.test.cn.entity.dto.ExcelData;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.httpclient.util.DateUtil;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.List;/*** @ClassName ExcelUtils* @Deacription excel工具类* @Author wangcaoxiu* @Date 2022/5/9 15:41* @Version 1.0**/
@Component
@Slf4j
public class ExcelUtils {/*** 方法名:exportExcel* 功能:导出Excel* 描述:* 创建人:typ* 创建时间:2018/10/19 16:00* 修改人:* 修改描述:* 修改时间:*/public static void exportExcel(HttpServletResponse response, ExcelData data) {//实例化XSSFWorkbookXSSFWorkbook workbook = new XSSFWorkbook();//创建一个Excel表单,参数为sheet的名字XSSFSheet sheet = workbook.createSheet("sheet");//设置表头setTitle(workbook, sheet, data.getHead());//设置单元格并赋值setData(sheet, data.getData());//设置浏览器下载setBrowser(response,workbook, data.getFileName());}/*** 方法名:setTitle* 功能:设置表头* 描述:* 创建人:typ* 创建时间:2018/10/19 10:20* 修改人:* 修改描述:* 修改时间:*/private static void setTitle(XSSFWorkbook workbook, XSSFSheet sheet, String[] str) {XSSFRow row = sheet.createRow(0);//设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度for (int i = 0; i <= str.length; i++) {sheet.setColumnWidth(i, 15 * 256);}//设置为居中加粗,格式化时间格式XSSFCellStyle style = workbook.createCellStyle();XSSFFont font = workbook.createFont();font.setBold(true);style.setFont(font);style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));//创建表头名称XSSFCell cell;for (int j = 0; j < str.length; j++) {cell = row.createCell(j);cell.setCellValue(str[j]);cell.setCellStyle(style);}}private static void setData(XSSFSheet sheet, List<String[]> data) {int rowNum = 1;for (int i = 0; i < data.size(); i++) {XSSFRow row = sheet.createRow(rowNum);for (int j = 0; j < data.get(i).length; j++) {row.createCell(j).setCellValue(data.get(i)[j]);}rowNum++;}}/*** 方法名:setBrowser* 功能:使用浏览器下载* 描述:* 创建人:typ* 创建时间:2018/10/19 16:20* 修改人:* 修改描述:* 修改时间:*/private static void setBrowser(HttpServletResponse response,XSSFWorkbook workbook, String fileName) {try {//清空responseresponse.reset();response.setContentType("application/octet-stream");response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");OutputStream os = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/x-download");response.setCharacterEncoding("utf-8");//将excel写入到输出流中workbook.write(os);os.flush();os.close();} catch (Exception e) {log.error("excel error :{}", e);}}}

其中ExcelData的实体类如下:

import com.alibaba.fastjson.JSONObject;import java.util.List;/*** @description excel导出类* @className ExcelData* @author* @date**/
public class ExcelData {private String fileName;private String[] head;private List<JSONObject> heads;private List<String[]> data;public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String[] getHead() {return head;}public void setHead(String[] head) {this.head = head;}public List<JSONObject> getHeads() {return heads;}public void setHeads(List<JSONObject> heads) {this.heads = heads;}public List<String[]> getData() {return data;}public void setData(List<String[]> data) {this.data = data;}
}

然后在代码里调用ExcelUtils实现下载:

import com.test.cn.entity.dto.ExcelData;
import com.test.cn.entity.dto.Person;
import com.test.cn.util.ExcelUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** className PersonController* description** @author * @version 1.0* @date **/
@Slf4j
@RestController
@RequestMapping("/person")
public class PersonController {@PostMapping("/exportExcel")public void exportExcel(HttpServletResponse response) {try {List<String[]> list = new ArrayList<>();Person person1 = new Person("张三",23, "男", "111111111111111111","18888888888");Person person2 = new Person("李四",34, "男", "111111111111111111","18888888888");Person person3 = new Person("王五",28, "男", "111111111111111111","18888888888");String[] data1 = new String[]{person1.getName(),person1.getAge().toString(),person1.getSex(),person1.getCertificateNumber(),person1.getPhoneNumber()};list.add(data1);String[] data2 = new String[]{person2.getName(),person2.getAge().toString(),person2.getSex(),person2.getCertificateNumber(),person2.getPhoneNumber()};list.add(data2);String[] data3 = new String[]{person3.getName(),person3.getAge().toString(),person3.getSex(),person3.getCertificateNumber(),person3.getPhoneNumber()};list.add(data3);//构造ExcelDataExcelData excelData = new ExcelData();excelData.setData(list);SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");String fileName = "人员信息表_" + df.format(new Date());excelData.setFileName(URLEncoder.encode(fileName, "UTF-8"));String[] head = {"姓名", "年龄", "性别", "身份证号", "手机号"};excelData.setHead(head);//导出ExcelUtils.exportExcel(response, excelData);log.info("请求 exportExcel end ......");} catch (Exception e) {log.error("exportExcel error:", e);}}
}

postman调用这个接口,即可看下成功下载的excel文件如下:

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

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

相关文章

selenium元素定位--xpath定位--层级与逻辑组合定位

其他元素非唯一时&#xff0c;又不想用xpath绝对定位时&#xff0c;需要用到层级与逻辑定位. 一、层级属性结合定位&#xff1a; 遇到元素没有class、name、id等或属性动态变化情况时&#xff0c;可以找父节点元素&#xff0c;父级节点没有id时&#xff0c;可以继续往上找id&…

✨一键释放手机空间,让生活更流畅——手机清理大师超实用体验分享

&#x1f4dd;亲爱的朋友们&#xff0c;你是否也曾为手机里堆积如山的照片、杂乱无章的相册和不断提醒存储不足的问题而头疼不已呢&#xff1f;今天给大家安利一款我近期爱不释手的神器——手机清理大师&#xff0c;它就如同你的手机专属大扫除小能手&#xff0c;让你的手机瞬间…

Python爬虫:爬虫基本概念、流程及https协议

本文目录&#xff1a; 一、爬虫的基本概念1.为什么要学习爬虫1.1 数据的来源1.2 爬取到的数据用途 2.什么是爬虫3. 爬虫的更多用途 二、爬虫的分类和爬虫的流程1.爬虫的分类2.爬虫的流程3.robots协议 三、爬虫http和https1.http和https的概念2.浏览器发送HTTP请求的过,2.1 http…

数据分析面试题(41~50)

41、lstm的原理、lstm和rnn的区别 ①LSTM是一种常用于处理序列数据的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;特别适用于长序列的建模。其主要特点是通过门控机制来控制信息的流动&#xff0c;从而有效地解决了传统RNN在处理长序列时的梯度消失或爆炸的问题。…

Git学习笔记之基础

本笔记是阅读《git pro》所写&#xff0c;仅供参考。 《git pro》网址https://git-scm.com/book/en/v2 git官网 https://git-scm.com/ 一、git起步 1.1、检查配置信息 git config --list查看所有的配置以及它们所在的文件 git config --list --show-origin可能有重复的变量名…

云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE

概述 随着业务不断创新&#xff0c;大型的单个应用和服务会被拆分为数个甚至数十个微服务&#xff0c;微服务架构已经被广泛应用。微服务的好处在于快速迭代&#xff0c;迭代过程保障线上流量不受损。依赖开源产品缺少专业运维工具&#xff0c;常常需要投入较大的运维人力和成…

SCI一区 | Matlab实现WOA-TCN-BiGRU-Attention鲸鱼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现WOA-TCN-BiGRU-Attention鲸鱼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现WOA-TCN-BiGRU-Attention鲸鱼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

Matter - nordic 自定义开发(4)

nRF Connect SDK 和 Matter SDK 的 matter 协议版本 nRF Connect SDK&#xff08;NCS&#xff09;是 Nordic 官方维护的&#xff0c;里面包含某个版本的 Matter SDK。Matter SDK 为 CSA 联盟维护的&#xff0c;里面包含各平台的SDK&#xff0c;其中包含了某个版本的 NCS。 需…

抖音视频关键词批量采集工具|无水印视频爬虫提取软件

抖音视频关键词批量采集工具&#xff1a; 我们很高兴地介绍最新推出的抖音视频关键词批量采集工具&#xff0c;该工具集成了多项强大功能&#xff0c;让您轻松实现视频内容的批量提取和下载。以下是详细的功能解析和操作说明&#xff1a; 主要功能&#xff1a; 关键词批量提取…

数据库与缓存一致性如何保证

最近建了一个技术交流群&#xff0c;欢迎志同道合的同学加入&#xff0c;群里主要讨论&#xff1a;分享业务解决方案、深度分析面试题并解答工作中遇到的问题&#xff0c;同时也能为我提供写作的素材。 欢迎加Q&#xff1a;312519302&#xff0c;进群讨论 前言 在工作中&#…

锦城软件定义网络实验(只用于教学,第八周结束后自行删除)

一、实验环境简介&#xff1a; Ubuntu 20.0.4 Ryu/Opendaylightmininetsflow(网络监视技术)Apifox/postman(REST API流表控制工具) 二、软件定义网络知识图谱 三、SDN知识概述 1.SDN的三个主要特征&#xff1a; 网络开放可编程&#xff1b; 控制平面与数据平面分离…

云架构(二) 大使模式

Ambassador pattern &#xff08;https://learn.microsoft.com/en-us/azure/architecture/patterns/ambassador&#xff09; 简单描述 创建一个助手服务&#xff0c;这个服务代表消费服务或者应用程序发送网络请求。大使服务可以看做是与客户机同一个位置的进程外代理。 这种…

Web CSS笔记2

目录 1、背景 ①、背景图片(image) ②、背景平铺&#xff08;repeat&#xff09; ③、背景位置(position) ④、背景附着&#xff08;attachment&#xff09; ⑤、背景透明(CSS3) ⑥、背景图片缩放大小&#xff08;size&#xff09;&#xff1a; ⑦、背景简写 2、标签显…

java智慧工地源码 大型建筑公司应用的智慧工地系统源码 智慧工地建筑管理系统源码

java智慧工地源码 大型建筑公司应用的智慧工地系统源码 智慧工地建筑管理系统源码 智慧工地是智慧地球理念在工程领域的具体体现&#xff0c;它代表了一种全新的工程全生命周期管理理念。通过运用信息化手段&#xff0c;智慧工地能够精确设计和模拟工程项目&#xff0c;实现互…

【高危漏洞】关于视频分片上传的漏洞修复

修改文件crmeb/app/services/system/attachment/SystemAttachmentServices.php 增加下方代码&#xff0c;将分片上传的第几片强制转成INT类型解决 $data[chunkNumber] (int)$data[chunkNumber];

linux命令-ln命令详解

文章目录 前言一、ln命令介绍1. 简介2. 硬链接2.1 inode介绍 3. 软连接&#xff08;符号链接&#xff09;4. 语法5. 选项和参数 二、示例用法1. 创建硬链接2. 创建软链接2.1 给文件创建软链接2.2 给目录创建软链接 总结 前言 本文介绍了ln命令的用法和特点&#xff0c;包括硬链…

【TypeScript】解决字面量类型推断错误的四种方式

解决字面量类型推断错误的四种方式 方式一&#xff1a;对象属性使用类型断言方式二&#xff1a;传参使用类型断言方式三&#xff1a;对象使用类型断言方式四&#xff1a;对象属性使用变量&#xff0c;变量使用字面量类型参考 declare function handleRequest(url: string, meth…

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

AD域---共享文件夹-容量配额管理

域环境共享文件夹-容量配额管理 要求 1/李斯用户配额10G云盘空间&#xff0c;张珊用户配额30G云盘空间 2/D:\ 配额-启用配额-启用配额管理-拒绝将磁盘空间给超过配额限制的用户-勾选 3/将磁盘空间限制为:55GB&#xff0c;将警告等级设为50GB 4/选择该卷的配额记录选项-勾选…