1.有时候根据需求需要将数据库中的数据导出到excl文档中,通过访问接口就能够下载到本地中。在java中提供了几种方式操作excl表,根据不同的情况选择不同的方式

package com.zengjx.controller;import jdk.nashorn.internal.runtime.regexp.joni.constants.AnchorType;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;@RequestMapping("/file")
@Controller
public class FileDownTest {@RequestMapping("/down")@ResponseBodypublic void TestFileDown(HttpServletRequest request , HttpServletResponse response) throws IOException, WriteException {//创建指定字符集的字符串String testExclDocment = new String("测试下载excl文档".getBytes(), "ISO-8859-1");//设置响应头response.setHeader("Content-Disposition" , "attachment;filename=" + testExclDocment + ".xls");//从响应数据中获取到输出流ServletOutputStream outputStream = response.getOutputStream();//使用java自带的创建工作文档WritableWorkbook workbook = Workbook.createWorkbook(outputStream);//创建工作表  第一个参数为表单名字  第二个参数为表的编号//编号的规则:1.按照创建的顺序给表的编号从0开始递增(实际编号)  2.如果手动赋予的编号和实际编号(规则一)不一致,还是通过规则一的方式创建//3.如果出现编号重复的情况(手动赋予的编号和实际编号冲突),后创建的表会插入到先创建的表的前面//4.如果出现编号重复的情况(手动赋予的编号和手动赋予的编号冲突),按照规则一创建//5.你把编号按照规则一创建就没什么事了WritableSheet sheet1 = workbook.createSheet("excl文档1", 0);WritableSheet sheet2 = workbook.createSheet("excl文档2", 1);WritableSheet sheet3 = workbook.createSheet("excl文档3", 2);//创建标签  第一参数为表的列  第二个参数为行的行  第三个参数为行的数据Label label1 = new Label(1, 1, "这是一句话");Label label2 = new Label(1, 1, "这也是一句话");Label label3 = new Label(1, 1, "这还是一句话");sheet1.addCell(label1);sheet2.addCell(label2);sheet3.addCell(label3);//输出workbook.write();//关流workbook.close();}@RequestMapping("HSSFDown")public void HSSFDown(HttpServletRequest request , HttpServletResponse response) throws IOException {try {//清空首部的空白行  jsp生成html文件的时候,html文件内部会出现很多空白行response.reset();//设置响应类型response.setContentType("application/vnd.ms-excel");//设置编码格式response.setCharacterEncoding("UTF-8");//创建文件名字的编码格式String fileName = new String("这是个excl表".getBytes("UTF-8"), "ISO-8859-1");//设置响应头response.addHeader("Content-Disposition" , "attachment;filename=" + fileName + "." + "xlsx");//创建一个字节数组输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//获取到图片并交给图片缓冲流BufferedImage bufferedImage = ImageIO.read(new File("E:\\zengjx_workspace_test\\spring_dynamicDataSource\\src\\main\\resources\\farseer.png"));//将图片缓冲流放入到字节数组输出流中ImageIO.write(bufferedImage,"png", byteArrayOutputStream);//创建工作簿HSSFWorkbook hssfWorkbook = new HSSFWorkbook();//使用工作簿创建表HSSFSheet imageSheet = hssfWorkbook.createSheet("图片表");//创建图片的顶级管理器  一个sheet仅有一个图片顶级管理器HSSFPatriarch drawingPatriarch = imageSheet.createDrawingPatriarch();//创建图片属性对象  参数说明可以看源码HSSFClientAnchor hssfClientAnchor = new HSSFClientAnchor(0,0,0,0,(short) 0,0,(short) 6,6);//设置锚点类型  参数说明可以看源码hssfClientAnchor.setAnchorType(3);//将图片插入到表中drawingPatriarch.createPicture(hssfClientAnchor , hssfWorkbook.addPicture(byteArrayOutputStream.toByteArray() , HSSFWorkbook.PICTURE_TYPE_PNG));//创建行HSSFRow row = imageSheet.createRow((short) 6);//创建单元格  通过行指定列得到单元格HSSFCell cell = row.createCell(0);//设置单元格数据cell.setCellValue("一句话");//将hssfWorkbook中的数据写入到响应流中hssfWorkbook.write(response.getOutputStream());//刷新输出流response.getOutputStream().flush();//关闭输出流response.getOutputStream().close();}catch (Exception e){e.printStackTrace();}}@RequestMapping("XSSFDown")public void XSSFDown(HttpServletRequest request , HttpServletResponse response) throws IOException {try {//清空首部的空白行  jsp生成html文件的时候,html文件内部会出现很多空白行response.reset();//设置响应类型response.setContentType("application/vnd.ms-excel");//设置编码格式response.setCharacterEncoding("UTF-8");//创建文件名字的编码格式String fileName = new String("这是个excl表".getBytes("UTF-8"), "ISO-8859-1");//设置响应头response.addHeader("Content-Disposition" , "attachment;filename=" + fileName + "." + "xlsx");//创建一个字节数组输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//获取到图片并交给图片缓冲流BufferedImage bufferedImage = ImageIO.read(new File("E:\\zengjx_workspace_test\\spring_dynamicDataSource\\src\\main\\resources\\farseer.png"));//将图片缓冲流放入到字节数组输出流中ImageIO.write(bufferedImage,"png", byteArrayOutputStream);//创建工作簿XSSFWorkbook xssfWorkbook = new XSSFWorkbook();//使用工作簿创建表XSSFSheet xssfSheet = xssfWorkbook.createSheet("这是一张表");//创建图片的顶级管理器  一个sheet仅有一个图片顶级管理器XSSFDrawing drawingPatriarch = xssfSheet.createDrawingPatriarch();//创建图片属性对象  参数说明可以看源码XSSFClientAnchor xssfClientAnchor = new XSSFClientAnchor(0,0,0,0, 0,0,6,6);//设置锚点类型  参数说明可以看源码xssfClientAnchor.setAnchorType(3);//将图片插入到表中drawingPatriarch.createPicture(xssfClientAnchor , xssfWorkbook.addPicture(byteArrayOutputStream.toByteArray() , XSSFWorkbook.PICTURE_TYPE_PNG));//创建行XSSFRow row = xssfSheet.createRow((short) 6);//创建单元格  通过行指定列得到单元格XSSFCell cell = row.createCell(0);//设置单元格数据cell.setCellValue("一句话");//将xssfWorkbook中的数据写入到响应流中xssfWorkbook.write(response.getOutputStream());//刷新输出流response.getOutputStream().flush();//关闭输出流response.getOutputStream().close();}catch (Exception e){e.printStackTrace();}}@RequestMapping("SXSSFDown")public void SXSSFDown(HttpServletRequest request , HttpServletResponse response) throws IOException {try {//清空首部的空白行  jsp生成html文件的时候,html文件内部会出现很多空白行response.reset();//设置响应类型response.setContentType("application/vnd.ms-excel");//设置编码格式response.setCharacterEncoding("UTF-8");//创建文件名字的编码格式String fileName = new String("这是个excl表".getBytes("UTF-8"), "ISO-8859-1");//设置响应头response.addHeader("Content-Disposition" , "attachment;filename=" + fileName + "." + "xlsx");//创建一个字节数组输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//获取到图片并交给图片缓冲流BufferedImage bufferedImage = ImageIO.read(new File("E:\\zengjx_workspace_test\\spring_dynamicDataSource\\src\\main\\resources\\farseer.png"));//将图片缓冲流放入到字节数组输出流中ImageIO.write(bufferedImage,"png", byteArrayOutputStream);//创建工作簿SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook();//使用工作簿创建表Sheet sheet = sxssfWorkbook.createSheet("这是一张表");//创建图片的顶级管理器  一个sheet仅有一个图片顶级管理器Drawing drawingPatriarch = sheet.createDrawingPatriarch();//创建图片属性对象  参数说明可以看源码XSSFClientAnchor xssfClientAnchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 6, 6);//设置锚点类型  参数说明可以看源码xssfClientAnchor.setAnchorType(3);//将图片插入到表中drawingPatriarch.createPicture(xssfClientAnchor , sxssfWorkbook.addPicture(byteArrayOutputStream.toByteArray() , SXSSFWorkbook.PICTURE_TYPE_PNG));//创建行Row row = sheet.createRow((short) 6);//创建单元格  通过行指定列得到单元格Cell cell = row.createCell(0);//设置单元格数据cell.setCellValue("一句话");//将sxssfWorkbook中的数据写入到响应流中sxssfWorkbook.write(response.getOutputStream());//刷新输出流response.getOutputStream().flush();//关闭输出流response.getOutputStream().close();}catch (Exception e){e.printStackTrace();}}}

2.几种方式的区别
HSSFWorkbook:用来操作Excel2003版本以前(含2003),扩展名为.xls。导出的行数限制为65535行,超过后系统会报错,一般不会发生内存不足的情况
XSSFWorkbook:用来操作Excel2007版本以后(含2007),扩展名为.xlsx。最多可以导出104万行,容易发生内存溢出的情况,原因是创建的XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell等都是存储在内存中需要消耗大量的内存
SXSSFWorkbook:用来操作Excel2007版本以后(含2007),扩展名为.xlsx。是基于XSSFWorkbook的,但是却不容易发生内初溢出的情况,原因是SXSSFWorkbook使用了持久化的机制,通过将excel rows持久化到磁盘上(位于C盘根目录下的temp文件夹,且不可访问、不可见)只会将最新的excel rows保存到内存中,所以只能访问到一部分的数据。SXSSFWorkbook不在支持Sheet.clone()、公式化的求值、在使用Excel模板下载数据时将不能动态改变表头(持久化的原因)

3.部分参照博客https://blog.csdn.net/u014644574/article/details/106999167

spring中创建excl表的几种方式并导出相关推荐

  1. Spring中进行事务管理的两种方式

    1.Spring中事务管理的API 事务是指逻辑上要么全部成功.要么全部失败的一组操作.例如用户A给用户B转账,则用户A账户余额减少.用户B账户增加这两个操作就是一组事务,必须全部成功或失败撤回操作, ...

  2. spring中AOP动态代理的两种方式

    AOP动态代理的两种方式 Spring AOP动态代理的方式(spring的AOP默认是JDK Proxy) 浅谈这两种动态代理 JDK的动态代理,需要有实现接口 动态代理--JDK Proxy ⚫ ...

  3. spring boot controller 初始化_使用 Spring 快速创建 web 应用的两种方式

    介绍 本篇文章主要介绍,如何使用 Spring 开发一个 Web 应用. 我们将研究用 Spring Boot 开发一个 web 应用,并研究用非 Spring Boot 的方法. 我们将主要使用 J ...

  4. Spring中配置Hibernate事务的四种方式

    2019独角兽企业重金招聘Python工程师标准>>> 为了保证数据的一致性,在编程的时候往往需要引入事务这个概念.事务有4个特性:原子性.一致性.隔离性.持久性. 事务的种类有两种 ...

  5. ROS话题通信中创建自定义数据类型的两种方式

    一.在同一个功能包下创建.msg文件 1.在功能包目录下创建msg文件夹 2.在文件夹中创建.msg文件 3.在该功能包的package.xml文件中加入: <build_depend>m ...

  6. MySQL创建数据表的三种方式

    目录 1. 常规 create table 方式 2. create table2 like table1 方式 3. 根据查询 table1 的结果集来创建表 table2 方式 1. 常规 cre ...

  7. Android中创建子线程的三种方式

    1.新建一个类继承自Thread,并重写run()方法,并在里面编写耗时逻辑. class ThreadTest extends Thread {@Overridepublic void run() ...

  8. Hibernate中自动生成数据库表的两种方式

    第一种方式:Hibernate中利用工具类自动生成数据库表 1.建好POJO object, XML Mapping File,配置文件(hibernate.cfg.xml). 2.编写工具类 imp ...

  9. 在 Spring中 创建 JavaBean

    2019独角兽企业重金招聘Python工程师标准>>> 在 Spring中 创建 JavaBean Spring 框架的最核心功能之一是 DI (Dependency Injecti ...

  10. 创建表的几种方式(语法总结)

    小伙伴们好啊,今天和大家说说用M和DAX创建表的几种方式. 我们需要创建的表格如下: 使用DAX创建表 首先来看一种最常用的方式: 方法一:使用DATATABLE创建,实现的代码如下: Employe ...

最新文章

  1. 2014 Super Training #8 C An Easy Game --DP
  2. window.opener方法的使用 js跨域
  3. 苹果笔记本只有电源键能用的解决办法
  4. 二分法与简单遍历的效率比较
  5. 【PP】工作中心(Work Center)
  6. Python数据结构——栈、队列的实现(一)
  7. 企业日志分析ELK(Logstash+Elasticsearch+Kibana)介绍及搭建
  8. p5js可以在linux上运行吗,在linux上使用python运行phantomjs
  9. Ubuntu 免密登录
  10. python pandas 拿取表格中两个列_在家憋着也是憋着,不如来学习一下python数据聚合的方法...
  11. readonly于disable的区别 及 name和id的区别
  12. Object-c 学习笔记
  13. 故障:OfficeScan Server 中的 DbServer.exe 占用 CPU 过高
  14. python3 爬虫 urlretrieve
  15. AutoRunner检查点之校验消息框
  16. %appdata% 代表什么?
  17. 疯了! Python 成功预测前三场比赛,快看今天的?(附代码及比赛时间表)
  18. 超图android离线瓦片,android端实践openlayers离线地图
  19. 航天生物计算机作文,科幻遨游太空作文(精选6篇)
  20. fluxion-wifi破解/钓鱼

热门文章

  1. ITSM正向浪涌测试仪
  2. 基于android 10的国产手机,Android 10正式推送!这款国产手机已经首发了
  3. 冲激脉冲抽样定理matlab,信号抽样及抽样定理分析.doc
  4. WPS思维导图去除背景的网格
  5. 装完系统还要装什么_一键重装系统后需要干嘛
  6. GNSS说第(七)讲---自适应动态导航定位(七)---抗差估计理论介绍
  7. JAVA SE — Day 18
  8. 设计一款内容阅读app,要求与市面上的产品有差异化,列举其核心功能,画出页面设计原型图(2-3个),说明其产品价值
  9. CDP营销方案 不仅仅是数据整合
  10. 金蝶凭证序时簿在哪_怎么用金蝶kis记账王打开会计分录序时簿