springboot+poi导出excel

article/2025/9/30 13:12:53

在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,如
在这里插入图片描述


http://chatgpt.dhexx.cn/article/kVBk0jZA.shtml

相关文章

POI实现导入导出excel

poi在日常的导入导出中是比较常用到的&#xff0c;最近也总结了下接触到的poi相关的导入导出的一些代码&#xff0c;有问题可以指出&#xff1a; package com.poi;import km.org.apache.poi.hssf.usermodel.*; import km.org.apache.poi.hssf.util.HSSFColor; import km.org.a…

java使用Poi导出excel表格

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) 在之前的一篇文章java操作Excel实战干货中展示了使用poi库读取excel表格的的用法&#xff0c;今天演示另一个常用功能&#xff0c;将数据导出到excel中&#xff…

POI导出Excel文件中文乱码

使用POI组件生产Excel文件时中文乱码&#xff0c;总结后可能错误原因如下&#xff1a; 后台导出Excel文件格式混乱 POI组件可生成.xls和.xlsx两种格式的Excel文件&#xff0c;设置文件格式时应注意与导出的格式相匹配。如果文件格式设置出错&#xff0c;则会出现以下错误&…

Java使用poi导出Excel之格式设置

最近接到一个需求&#xff0c;客户不满意原本导出的csv文件&#xff0c;想要导出Excel文件。不就导出Excel文件嘛&#xff0c;小意思&#xff0c;于是乎信心满满从网上扒导出的代码&#xff0c;一顿CV大法&#xff0c;搞定&#xff01;代码如下: import lombok.extern.slf4j.S…

Java使用POI导出Excel

目录 一、前景二、概念2.1. 简介2.2.Excel版本和相关对象2.3.WorkBook2.4.POI依赖 三、POI - 写3.1.代码示例3.2. 性能对比3.3. 测试rowAccessWindowSize3.4. 导出Excel样式设置 四、POI - 读4.1.代码示例4.2.读取不同的数据类型4.3.读取公式 五、POI - 遇到的坑5.1.为什么模板…

Java实现八大排序算法

原文链接&#xff1a; 八大排序算法总结与java实现 - iTimeTraveler 概述 因为健忘&#xff0c;加上对各种排序算法理解不深刻&#xff0c;过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结&#xff0c;强行学习。首先罗列一下常见的十大排序算法&…

通过java实现八大排序的功能

八大排序(java实现) 常见的排序算法如下&#xff1a; 直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归并排序基数排序 它们都属于内部排序&#xff0c;也就是只考虑数据量较小仅需要使用内存的排序算法&#xff0c;他们之间关系如下&#xff1a; 稳定与非稳定 …

c语言基数为3变为基数为10,必须知道的C语言八大排序算法(收藏)

概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用时…

数据结构( 排序)

排序 1、排序的基本概念2、插入排序①.直接插入排序②.折半插入排序③.希尔排序 3、交换排序①.冒泡排序②.快速排序 4、选择排序①.简单选择排序②.树形选择排序③.堆排序 5、归并排序6、基数排序7、总结8、例题与应用 1、排序的基本概念 排序是计算机内经常进行的一种操作&a…

十大经典排序算法python版本_【程序员面试必备】动画详解十大经典排序算法(C语言版)...

欢迎访问我的博客原文 排序算法是程序员必备的基础知识&#xff0c;弄明白它们的原理和实现很有必要。本文中将通过非常细节的动画展示出算法的原理&#xff0c;配合代码更容易理解。 概述 由于待排序的元素数量不同&#xff0c;使得排序过程中涉及的存储器不同&#xff0c;可将…

八大排序算法详解(Java语言实现)

概述 因为健忘&#xff0c;加上对各种排序算法理解不深刻&#xff0c;过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结&#xff0c;强行学习。首先罗列一下常见的十大排序算法&#xff1a; 直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归…

九大排序算法-C语言实现及详解

概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用…

常用的排序算法-C语言

目录 冒泡排序   鸡尾酒排序  选择排序插入排序 二分插入排序  希尔排序  归并排序堆排序快速排序 我们通常所说的排序算法往往指的是内部排序算法&#xff0c;即数据记录在内存中进行排序。 排序算法大体可分为两种&#xff1a; 一种是比较排序&#xff0c;时间复杂度…

九大排序算法详解 - C语言篇

概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用时…

数据结构排序算法总结

学完数据结构已经有好长一段时间了&#xff0c;最近又重新回顾&#xff0c;做一个八大排序的总结&#xff0c;以便后期回顾。 目录 一、插入排序 1.直接插入排序 2.希尔排序 二、交换排序 1.冒泡排序 2.快速排序 三、选择排序 1.简单选择排序 2.堆排序 四、归并排序 …

程序员面试必备——动画详解十大经典排序算法(C语言版)

博客原文地址 排序算法是程序员必备的基础知识&#xff0c;弄明白它们的原理和实现很有必要。本文中将通过非常细节的动画展示出算法的原理&#xff0c;配合代码更容易理解。 概述 由于待排序的元素数量不同&#xff0c;使得排序过程中涉及的存储器不同&#xff0c;可将排序方…

【C语言八大排序思想及代码实现】

文章目录 系列文章目录前言一、冒泡排序二、选择排序三、直接插入排序四、希尔排序五、归并排序六、基数&#xff08;桶&#xff09;排序七、堆排序八、快速排序总结 一、冒泡排序 思想&#xff1a; 从第一个数开始依次向后进行比较&#xff08;第一个和第二个比较然后第二个…

经典排序算法总结(C实现)

一 排序算法介绍 1.0 排序的概述 在计算机计算和处理加工数据时&#xff0c;经常会直接或间接地涉及到数据的排序问题。可以简单地将排序操作理解为&#xff1a;将一个按值无序的数据序列转换成为一个按值有序的数据序列的过程。例如&#xff0c;将一个无序的数组 A[5] {7, …

主元排序法c语言程序,C/C++实现八大排序算法汇总

概述排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大&#xff0c;则应采用时间…

内排序算法小结

针对近两天所复盘的《数据结构》中的内排序部分&#xff0c;做一个小总结。尽力在最大程度上把考点重现出来&#xff0c;以便复盘之需。 本文所有算法均使用 C语言 实现。 本博客仅从个人的考点梳理为基&#xff0c;内容相较全局还有很多缺失&#xff0c;读者请权衡参考。 目…