form请求导出表格_程序员:java导出Excel,附带依赖、后端代码和前端JS
第一步:加入需要的依赖
org.apache.poi
poi
${poi.version}
org.apache.poi
poi-ooxml
${poi.version}
第二步:工具类
import org.apache.poi.xssf.usermodel.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 功能说明:文件工具类
* @author xuwen
* @date 2019/04/22
*/
public class FileUtils {
/**
* 导出文件
* @param response 请求响应
* @param sheetName Sheet名称
* @param headers 表头
* @param stringList 表数据
*/
public static void downloadExcelFile(HttpServletResponse response, String sheetName, String[] headers,
List stringList) {
FileUtils.exportExcelFile(response, FileUtils.createExcelFile(sheetName, headers, stringList));
}
/**
* 创建excel文件
* @param sheetName Sheet名称
* @param headers 表头
* @param stringList 表数据
* @author xuwen
*/
private static XSSFWorkbook createExcelFile(String sheetName, String[] headers, List stringList) {
// 创建excel文件
XSSFWorkbook workbook = new XSSFWorkbook();
// 设置excel文件格式
XSSFCellStyle cellStyle = workbook.createCellStyle();
// 设置sheet名称
XSSFSheet sheet = workbook.createSheet(sheetName);
// 初始化行号
int rowNum = 0;
// 创建表头行
XSSFRow row = sheet.createRow(rowNum);
// 填充表头
for (int m = 0; m < headers.length; m++) {
XSSFCell cell = row.createCell(m);
cell.setCellValue(headers[m]);
}
// 填充表格数据
for (int n = 0; n < stringList.size(); n++) {
XSSFRow dataRow = sheet.createRow(++rowNum);
String[] data = stringList.get(n);
for (int j = 0; j < data.length; j++) {
dataRow.createCell(j).setCellValue(data[j]);
}
}
return workbook;
}
/**
* 下载模板
* @param response 请求响应
* @param file 文件
* @author xuwen
*/
public static void downloadTemplate(HttpServletResponse response, String file) {
try {
ClassPathResource classPathResource = new ClassPathResource(file);
InputStream inputStream = classPathResource.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
FileUtils.exportExcelFile(response, workbook);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 在响应中返回文件流
* @param response 请求响应
* @param workbook excel文件
* @author xuwen
*/
public static void exportExcelFile(HttpServletResponse response, XSSFWorkbook workbook) {
response.setContentType("application/octet-stream;charset=UTF-8");
String excelFileName = "export.xlsx";
try {
response.addHeader("Content-Disposition", "attachment;filename="
+ new String(excelFileName.getBytes("GB2312"), "iso8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第三步:前端部分
自定义一个点击事件 在 Ajax/Axios/Fetch 的 成功回调函数 里触发此方法即可。(这一步使用vue和jquery都一样,因为使用的是原生js)
/**
* 下载文件
* @author xuwen
*/
export function download(data, fileName) {
let blob = new Blob([data]); //创建一个blob对象
let a = document.createElement('a'); //创建一个标签
a.href = URL.createObjectURL(blob); // response is a blob
a.download = fileName; //文件名称
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
}
第四步:自定义业务逻辑
这里为了做简单示例,dao查询直接用Map接收数据。
public void exportExcel(HttpServletResponse response, String id) {
// sheet名称
String sheetName = "库存信息";
// 表头
String[] headers = {"序号", "编号", "名称", "下单时间"};
//查询需要导出报表的信息
List> list = mapper.findById(id);
List strList = new ArrayList<>();
int index = 0;
for (Map map : list) {
index ++;
//String.valueOf() 和 .toString() 懒得判空,直接使用 +“” 变字符串
String[] strings = {String.valueOf(index), map.get("code") + "", map.get("name") + "", map.get("createDate") + ""};
strList.add(strings);
}
// 导出文件, 这里调用上面第二步给的工具类即可
FileUtils.downloadExcelFile(response, sheetName, headers, strList);
原文链接:https://blog.csdn.net/qq_41520146/article/details/103277233
form请求导出表格_程序员:java导出Excel,附带依赖、后端代码和前端JS相关推荐
- java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划
作者 | 天涯泪小武 责编 | 王晓曼 出品 | CSDN博客 前天618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了几千台服务器,每秒大概接收几千个k ...
- 程序员职业技能编写_程序员不需要的不需要编写代码的技能
程序员职业技能编写 You can build the best application in the world, but if you don't know how to tell anyone ...
- 佛祖保佑代码无bug图片_程序员都有哪些奇趣的代码注释,细思极恐
在很多不熟悉程序员的群体中,可能都认为程序员是沉闷一次的代表,但其实不然,很多程序员都是非常幽默有趣且都有一颗非常闷骚的心.这尤其体现在他们呢好玩的代码注释上面,我找了一写奇趣的代码注释类型,小伙伴们 ...
- python武器代码_程序员需要掌握的七种 Python 代码更易维护的武器
检查你的代码风格 PEP 8 是 Python 代码风格规范,它规定了类似行长度.缩进.多行表达式.变量命名约定等内容.尽管你的团队自身可能也会有稍微不同于 PEP 8 的代码风格规范,但任何代码风格 ...
- git统计每个人的代码行数_程序员实用工具,推荐一款代码统计神器GitStats
阅读全文需7分钟,工具很实用. 1. 前言 对于Git项目开发,有一些可视化的工具,如gitk,giggle等,来查看项目的开发历史.但对于大型的项目,这些简单的可视化工具远远不足以了解项目完整的开发 ...
- 如何用python读取表格_如何使用Python读取excel文件?(代码示例)
使用xlrd模块,可以从电子表格中检索信息.例如,可以用Python来读取.写入或修改数据.此外,用户可能必须遍历各种表,并根据一些标准检索数据,或者修改一些行和列,并执行大量工作. xlrd模块用于 ...
- hibernate savealiasentity 保存后id为空_好程序员Java教程分享Java面试题之Hibernate
好程序员Java教程分享Java面试题之Hibernate 1.简书一下Hibernated的开发流程 第一步:加载Hibernate的配置文件,读取配置文件的参数, 第二步:创建SessionFac ...
- ajax不执行_好程序员Java学习路线分享原生Ajax的使用
好程序员Java学习路线分享原生Ajax的使用,首先我们先来看一下什么是 AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 就是 异步.JavaScript ...
- java post请求 json_好程序员Java教程分享Vue插件之Axios
好程序员Java教程分享Vue插件之Axios 环境安装: npm install --save axios vue-axios //安装axios Npm install //安装依赖 在main. ...
- java web swing 教程_好程序员Java教程解读什么是swing
原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...
最新文章
- CSS命名规范(建议版)(转)
- 错误: 非法的表达式开始_虽然这两个C语言宏定义很简单,但是能在程序运行前找到错误代码...
- 应届生开40万年薪?OPPO大手笔招揽芯片人才引热议
- E 定向 牛客练习赛25
- STM8S_007_片内FLASH和EEPROM编程
- 蓝桥杯 明码题解 【Java实现】
- java画一个八卦_View绘制系列(9)-Canvas八卦图绘制
- 在实习的过程中规划自己的未来职业蓝图
- csp是什么比赛_有关CSPJ/S比赛问题
- SQLSERVER、ORACLE中根据汉字获取拼音函数
- windows xp\windows7\windows8\windows10\windows11原版镜像下载地址汇总
- 青铜器RDM与微软Project计划进度管理对比分析
- python自学1:更改excel内容案例及技术总结
- SQL合并 合并id相同的数据
- 万代南梦宫假面骑士时尚品牌HENSHIN by KAMEN RIDER首登中国;安宏资本宣布与资生堂达成协议 | 知消...
- 编写一个类Shop(商店)、内部类InnerCoupons(内部购物券)
- 显微镜下的白细胞 捉到一群正在撒欢de小可爱,哇哇~
- 如何在ActiveX控件中使用字体3
- 向Mysql批量插入50万条数据
- 软件测试需要学什么?软件测试难学吗?简单几句让你认识