在web开发中经常遇到将数据写入excel并导出的需求,下面整理springboot+poi实现导出excel的实例。
搭建springboot工程,引入依赖,细节不在赘述。
引入poi依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency>

封装的工具类

public class ExcelUtil {/*** 导出Excel* @param sheetName sheet名称* @param title 标题* @param values 内容* @param workbook HSSFWorkbook对象* @author* @date * @return*/public static HSSFWorkbook getHSSFWorkbook(String sheetName, String [] title, String [][] values, HSSFWorkbook workbook){// 第一步,创建一个HSSFWorkbook,对应一个Excel文件if(workbook == null){workbook = new HSSFWorkbook();}// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = workbook.createSheet(sheetName);// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制HSSFRow row = sheet.createRow(0);// 第四步,创建单元格,并设置值表头 设置表头居中HSSFCellStyle style = workbook.createCellStyle();// 创建一个居中格式style.setAlignment(HorizontalAlignment.CENTER);// 声明列对象HSSFCell cell = null;// 创建标题for(int i=0;i<title.length;i++){cell = row.createCell(i);cell.setCellValue(title[i]);cell.setCellStyle(style);}// 创建内容for(int i=0;i<values.length;i++){row = sheet.createRow(i + 1);for(int j=0;j<values[i].length;j++){// 将内容按顺序赋给对应的列对象row.createCell(j).setCellValue(values[i][j]);}}return workbook;}/*** Excel表格导出* @param response HttpServletResponse对象* @param excelData Excel表格的数据,封装为List<List<String>>,其中包含标题* @param sheetName sheet的名字* @param fileName 导出Excel的文件名* @param columnWidth Excel表格的宽度,建议为15* @throws IOException 抛IO异常*/public static void exportExcel(HttpServletResponse response,List<List<String>> excelData,String sheetName,String fileName,int columnWidth) throws IOException {// 声明一个工作簿HSSFWorkbook workbook = new HSSFWorkbook();// 生成一个表格,设置表格名称HSSFSheet sheet = workbook.createSheet(sheetName);// 设置表格列宽度sheet.setDefaultColumnWidth(columnWidth);// 写入List<List<String>>中的数据int rowIndex = 0;for(List<String> data : excelData){// 创建一个row行,然后自增1HSSFRow row = sheet.createRow(rowIndex++);// 遍历添加本行数据for (int i = 0; i < data.size(); i++) {// 创建一个单元格HSSFCell cell = row.createCell(i);// 创建一个内容对象HSSFRichTextString text = new HSSFRichTextString(data.get(i));// 将内容对象的文字内容写入到单元格中cell.setCellValue(text);}}// 准备将Excel的输出流通过response输出到页面下载// 八进制输出流response.setContentType("application/octet-stream");// 设置导出Excel的名称response.setHeader("Content-disposition", "attachment;filename=" + fileName);// 刷新缓冲response.flushBuffer();// workbook将Excel写入到response的输出流中,供页面下载该Excel文件workbook.write(response.getOutputStream());// 关闭workbookworkbook.close();}}/*** Excel表格导入* @param inputStream 输入流*/public static List<Object[]> importExcel(InputStream inputStream) {try {List<Object[]> list = new ArrayList<>();Workbook workbook = WorkbookFactory.create(inputStream);Sheet sheet = workbook.getSheetAt(0);// 获取sheet的行数int rows = sheet.getPhysicalNumberOfRows();for (int i = 0; i < rows; i++) {// 过滤表头行if (i == 0) {continue;}// 获取当前行的数据Row row = sheet.getRow(i);Object[] objects = new Object[row.getPhysicalNumberOfCells()];int index = 0;for (Cell cell : row) {if (cell.getCellType().equals(NUMERIC)) {objects[index] = (int) cell.getNumericCellValue();}if (cell.getCellType().equals(STRING)) {objects[index] = cell.getStringCellValue();}if (cell.getCellType().equals(BOOLEAN)) {objects[index] = cell.getBooleanCellValue();}if (cell.getCellType().equals(ERROR)) {objects[index] = cell.getErrorCellValue();}index++;}list.add(objects);}System.out.println("导入文件解析成功!");return list;}catch (Exception e){System.out.println("导入文件解析失败!");e.printStackTrace();}return null;}

使用方式

@RequestMapping("/exportExcel")public void exportExcel(HttpServletResponse response) throws IOException {List<List<String>> excelData = new ArrayList<>();// 标题List<String> head = new ArrayList<>();head.add("第一列");head.add("第二列");head.add("第三列");// 测试数据1List<String> data1 = new ArrayList<>();data1.add("曹操");data1.add("男");data1.add("奸雄");// 测试数据2List<String> data2 = new ArrayList<>();data2.add("刘备");data2.add("男");data2.add("枭雄");excelData.add(head);excelData.add(data1);excelData.add(data2);String sheetName = "测试";String fileName = "Excel123.xls";ExcelUtil.exportExcel(response, excelData, sheetName, fileName, 15);}@RequestMapping(value = "/importExcel", method = RequestMethod.POST)public Object importMemberList2(@RequestPart("file") MultipartFile file) throws IOException {// excel读取List<Object[]> objects = ExcelUtil.importExcel(file.getInputStream());// 数据入库objects.forEach(System.out::println);return "ok";}

在浏览器访问即可弹出下载excel弹窗,选择路径及文件名称即可下载,如

调用上传接口上传excel,如

springboot+poi导出excel相关推荐

  1. SpringBoot POI导出Excel

    SpringBoot导出Excel HSSFWorkbook.XSSFWorkbook.SXSSFWorkbook的区别: HSSFWorkbook一般用于Excel2003版及更早版本(扩展名为.x ...

  2. Springboot POI导出Excel(浏览器)

    需求:页面根据查询条件导出(浏览器) 由于本次导出数据量较大,这里采用XSSFWorkbook多线程进行导出,注:XSSFWorkbook导出excel文件结尾为:".xlsx". ...

  3. springboot中使用poi导出excel文件(亲测实现了第一个功能)

    1.POI简介 Jakarta POI 是一套用于访问微软格式文档的Java API. 组件HWPF用于操作Word的; 组件HSSF用于操作Excel格式文件. 2.常用组件 HSSFWorkboo ...

  4. Springboot利用poi导出excel下载

    Springboot利用poi导出excel下载 因为项目中之前的做法是用反射获取属性,所以demo中也是用的反射,我看网上很多文章都是存入一个List中,不知道这两种哪种更何合适一点,或者有什么更好 ...

  5. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  6. Springboot整合Poi导出excel(注解版)

    简介 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 上文提到通过poi简单导出Excel后,很多读者反应需要解决导出自适应 ...

  7. Java:使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开

    使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开 问题 方案 问题 在SpringBoot项目中,使用POI导出查询结果至Excel文件中,成功导出后打开Excel文件 ...

  8. springboot项目导出excel 合并单元格表格

    springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...

  9. springboot+poi导出百万级数据避免OOM内存溢出

    springboot+poi导出百万级数据避免OOM内存溢出 文章目录 springboot+poi导出百万级数据避免OOM内存溢出 前言 一.具体实现 二.代码实现 1.引入poi包 2.功能代码 ...

  10. POI 导出excel带小数点的数字格式显示不对解决方法

    POI 导出excel带小数点的数字格式显示不对解决方法 参考文章: (1)POI 导出excel带小数点的数字格式显示不对解决方法 (2)https://www.cnblogs.com/firstd ...

最新文章

  1. 【经典回放】多种语言系列数据结构算法:基数排序
  2. deviceiocontrol buffered 返回不了_这3种减肥法是无用功,累死累活也瘦不了
  3. access open 知乎_做目标检测,这6篇就够了:CVPR 2020目标检测论文盘点
  4. 搭建、使用与维护私有PyPi仓库
  5. 手机闹钟软件测试用例,手机app测试用例.docx
  6. jmeter下载安装教程
  7. Scrapy实战:使用IDE工具运行爬虫
  8. 明源售楼系统技术解析—MVC架构
  9. 俄罗斯计算机三进制优缺点,为什么我们没有用上三进制的计算机
  10. 古典概型——概率论与数理统计(宋浩)
  11. 利用百度地图服务发布自己制作图片的地图
  12. Dos用户学Unix指南(1)
  13. Django笔记 CMS框架Mezzanine 1
  14. spring boot拦截器 过滤器
  15. 理解vue-admin-template模板,连接后端改造登陆功能
  16. 8.内核级线程(核心级线程)
  17. 安恒5月赛BJDCTF3th-逆向
  18. Vue2.x + element ui 导入导出excel
  19. django源码阅读 manage.py文件
  20. Unity实现第三人称视角

热门文章

  1. (尚硅谷)2022 版 MyBatis 教程笔记一
  2. 1.Sigar介绍和配置
  3. 使用Sigar采系统信息
  4. 读文件fread函数的用法
  5. SAS进行多元回归线性分析
  6. 软考 网络工程师如何复习?
  7. vasp软件linux,QVASP 是一款 VASP 的辅助软件
  8. 代码精进之代码规范(二)
  9. 华硕服务器 u盘安装系统,华硕台式机重装系统详细图解步骤
  10. Graph_editor——好用的画图软件,你会用吗?