第一步:加入需要的依赖

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相关推荐

  1. java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划

    作者 | 天涯泪小武 责编 | 王晓曼 出品 | CSDN博客 前天618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了几千台服务器,每秒大概接收几千个k ...

  2. 程序员职业技能编写_程序员不需要的不需要编写代码的技能

    程序员职业技能编写 You can build the best application in the world, but if you don't know how to tell anyone ...

  3. 佛祖保佑代码无bug图片_程序员都有哪些奇趣的代码注释,细思极恐

    在很多不熟悉程序员的群体中,可能都认为程序员是沉闷一次的代表,但其实不然,很多程序员都是非常幽默有趣且都有一颗非常闷骚的心.这尤其体现在他们呢好玩的代码注释上面,我找了一写奇趣的代码注释类型,小伙伴们 ...

  4. python武器代码_程序员需要掌握的七种 Python 代码更易维护的武器

    检查你的代码风格 PEP 8 是 Python 代码风格规范,它规定了类似行长度.缩进.多行表达式.变量命名约定等内容.尽管你的团队自身可能也会有稍微不同于 PEP 8 的代码风格规范,但任何代码风格 ...

  5. git统计每个人的代码行数_程序员实用工具,推荐一款代码统计神器GitStats

    阅读全文需7分钟,工具很实用. 1. 前言 对于Git项目开发,有一些可视化的工具,如gitk,giggle等,来查看项目的开发历史.但对于大型的项目,这些简单的可视化工具远远不足以了解项目完整的开发 ...

  6. 如何用python读取表格_如何使用Python读取excel文件?(代码示例)

    使用xlrd模块,可以从电子表格中检索信息.例如,可以用Python来读取.写入或修改数据.此外,用户可能必须遍历各种表,并根据一些标准检索数据,或者修改一些行和列,并执行大量工作. xlrd模块用于 ...

  7. hibernate savealiasentity 保存后id为空_好程序员Java教程分享Java面试题之Hibernate

    好程序员Java教程分享Java面试题之Hibernate 1.简书一下Hibernated的开发流程 第一步:加载Hibernate的配置文件,读取配置文件的参数, 第二步:创建SessionFac ...

  8. ajax不执行_好程序员Java学习路线分享原生Ajax的使用

    好程序员Java学习路线分享原生Ajax的使用,首先我们先来看一下什么是 AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 就是 异步.JavaScript ...

  9. java post请求 json_好程序员Java教程分享Vue插件之Axios

    好程序员Java教程分享Vue插件之Axios 环境安装: npm install --save axios vue-axios //安装axios Npm install //安装依赖 在main. ...

  10. java web swing 教程_好程序员Java教程解读什么是swing

    原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...

最新文章

  1. CSS命名规范(建议版)(转)
  2. 错误: 非法的表达式开始_虽然这两个C语言宏定义很简单,但是能在程序运行前找到错误代码...
  3. 应届生开40万年薪?OPPO大手笔招揽芯片人才引热议
  4. E 定向 牛客练习赛25
  5. STM8S_007_片内FLASH和EEPROM编程
  6. 蓝桥杯 明码题解 【Java实现】
  7. java画一个八卦_View绘制系列(9)-Canvas八卦图绘制
  8. 在实习的过程中规划自己的未来职业蓝图
  9. csp是什么比赛_有关CSPJ/S比赛问题
  10. SQLSERVER、ORACLE中根据汉字获取拼音函数
  11. windows xp\windows7\windows8\windows10\windows11原版镜像下载地址汇总
  12. 青铜器RDM与微软Project计划进度管理对比分析
  13. python自学1:更改excel内容案例及技术总结
  14. SQL合并 合并id相同的数据
  15. 万代南梦宫假面骑士时尚品牌HENSHIN by KAMEN RIDER首登中国;安宏资本宣布与资生堂达成协议 | 知消...
  16. 编写一个类Shop(商店)、内部类InnerCoupons(内部购物券)
  17. 显微镜下的白细胞 捉到一群正在撒欢de小可爱,哇哇~
  18. 如何在ActiveX控件中使用字体3
  19. 向Mysql批量插入50万条数据
  20. 软件测试需要学什么?软件测试难学吗?简单几句让你认识

热门文章

  1. C语言数据类型大小分析(基于VC2005编译器)
  2. jenkins+docker+nginx服务并访问vue项目
  3. 字节码指令之对象的创建与访问指令
  4. 分布式事务之基础概念篇
  5. 商品的SPU与SKU的区别
  6. Hyperledger Fabric Endorsement policies——背书策略
  7. UML类图、代理学习
  8. 多进程-multiprocess
  9. U-boot在S3C2440上的移植详解(二)
  10. .NET读、写、查、删、改XML文件