写在最前面:
    使用的是JAVA POI实现的导出Excel;
    POI 提供了对2003版本的Excel的支持 ---- HSSFWorkbook
    POI 提供了对2007版本以及更高版本的支持 ---- XSSFWorkbook

引入相关依赖:

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>
/*** 读取Excel文件的内容* @param inputStream excel文件,以InputStream的形式传入* @param sheetName sheet名字* @return 以List返回excel中内容*/public static List<Map<String, String>> readExcel(InputStream inputStream, String sheetName) {//定义工作簿XSSFWorkbook xssfWorkbook = null;try {xssfWorkbook = new XSSFWorkbook(inputStream);} catch (Exception e) {System.out.println("Excel data file cannot be found!");}//定义工作表XSSFSheet xssfSheet;if (sheetName.equals("")) {// 默认取第一个子表xssfSheet = xssfWorkbook.getSheetAt(0);} else {xssfSheet = xssfWorkbook.getSheet(sheetName);}List<Map<String, String>> list = new ArrayList<Map<String, String>>();//定义行//默认第一行为标题行,index = 0XSSFRow titleRow = xssfSheet.getRow(0);//循环取每行的数据for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {XSSFRow xssfRow = xssfSheet.getRow(rowIndex);if (xssfRow == null) {continue;}Map<String, String> map = new LinkedHashMap<String, String>();//循环取每个单元格(cell)的数据for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {XSSFCell titleCell = titleRow.getCell(cellIndex);XSSFCell xssfCell = xssfRow.getCell(cellIndex);map.put(getString(titleCell),getString(xssfCell));}list.add(map);}return list;}/*** 把单元格的内容转为字符串* @param xssfCell 单元格* @return 字符串*/public static String getString(XSSFCell xssfCell) {if (xssfCell == null) {return "";}if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {return String.valueOf(xssfCell.getNumericCellValue());} else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());} else {return xssfCell.getStringCellValue();}}/*** 把内容写入Excel* @param list 传入要写的内容,此处以一个List内容为例,先把要写的内容放到一个list中* @param outputStream 把输出流怼到要写入的Excel上,准备往里面写数据*/public static void writeExcel(List<List> list, OutputStream outputStream) {//创建工作簿XSSFWorkbook xssfWorkbook = null;xssfWorkbook = new XSSFWorkbook();//创建工作表XSSFSheet xssfSheet;xssfSheet = xssfWorkbook.createSheet();//创建行XSSFRow xssfRow;//创建列,即单元格CellXSSFCell xssfCell;//把List里面的数据写到excel中for (int i=0;i<list.size();i++) {//从第一行开始写入xssfRow = xssfSheet.createRow(i);//创建每个单元格Cell,即列的数据List sub_list =list.get(i);for (int j=0;j<sub_list.size();j++) {xssfCell = xssfRow.createCell(j); //创建单元格xssfCell.setCellValue((String)sub_list.get(j)); //设置单元格内容}}//用输出流写到exceltry {xssfWorkbook.write(outputStream);outputStream.flush();outputStream.close();}catch (IOException e) {e.printStackTrace();}}

附:把一个Map中的所有键和值分别放到一个list中,再把这两个list整个放到一个大的list里面,即 [ [key1,key2,key3…] , [value1,value2,value3…] ]

    public static List<List> convertMapToList(Map map) {List<List> list = new ArrayList<List>();List<String> key_list = new LinkedList<String>();List<String> value_list = new LinkedList<String>();Set<Entry<String,String>> set = map.entrySet();Iterator<Entry<String,String>> iter1 = set.iterator();while (iter1.hasNext()) {key_list.add(iter1.next().getKey());}list.add(key_list);Collection<String> value = map.values();Iterator<String> iter2 = value.iterator();while (iter2.hasNext()) {value_list.add(iter2.next());}list.add(value_list);return list;}




导出接口:

package com.wqd.dove.demo.export.controller;import com.wqd.dove.demo.export.mapper.UserMapper;
import com.wqd.dove.demo.export.pojo.User;
import lombok.RequiredArgsConstructor;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;/*** @author frank* @description 导出Excel文件控制器* @date 2021/12/18 14:06*/
@RestController
@RequiredArgsConstructor
@RequestMapping(value = {"/export"})
public class MyExcelExportController {private final UserMapper userMapper;@GetMapping(value = "/excel")public void exportExcel(HttpServletResponse response) throws UnsupportedEncodingException {List<User> list = userMapper.list();XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet();XSSFRow row0 = sheet.createRow(0);row0.createCell(0).setCellValue("姓名");row0.createCell(1).setCellValue("地址");row0.createCell(2).setCellValue("密码");row0.createCell(3).setCellValue("电话");for (int i = 0; i < list.size(); i++) {XSSFRow row = sheet.createRow(i + 1);XSSFCell cell = row.createCell(0);cell.setCellValue(list.get(i).getName());XSSFCell cell1 = row.createCell(1);cell1.setCellValue(list.get(i).getAddress());XSSFCell cell2 = row.createCell(2);cell2.setCellValue(list.get(i).getPassword());XSSFCell cell3 = row.createCell(3);cell3.setCellValue(list.get(i).getPhone());}response.setCharacterEncoding("UTF-8");//让服务器告诉浏览器它发送的数据属于什么文件类型response.setHeader("content-Type", "application/vnd.ms-excel");//当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("b.xlsx", "UTF-8"));try {workbook.write(response.getOutputStream());} catch (IOException e) {e.printStackTrace();}}}

访问接口:

成功下载:

java用XSSFWorkbook实现读写Excel相关推荐

  1. Java程序利用POJ读写Excel的.xls或.xlsx文件所需的3个jar包

    Java程序利用POJ读写Excel文件时,不能只用poi的jar包,因为它还依赖于xmlbeans的jar包,xmlbeans又以来与common-collections的jar包,因此,正常使用P ...

  2. java使用jxl包读写excel表格文件,即xls格式文件

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用jxl包读写excel表格文件,即xls格式文件 本实例演示使用jxl包实现对excel文件的操作,下载 测试代码 public st ...

  3. Java:apache.poi读写Excel文件

    依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</ar ...

  4. Java:用POI读写Excel

    大家注意,请用最新的POI开发包进行操作,版本至少要不低于3.2,这样才能顺利完成以下所有操作.POI3.2下载地址是:http://apache.freelamp.com/poi/release/b ...

  5. java jxl写excel_java读写Excel(JXL)

    1.找到JXL.jar包,导入程序. 2.读取Excel public static void readExcel() throws BiffException, IOException{ //创建一 ...

  6. Java EasyExcel在Web网站中读写Excel的方法及示例代码

    使用EasyExcel可以更容易简单在Web网站中读写Excel,本文主要介绍在Java Web网站中读写Excel方法及示例代码. 原文地址:Java EasyExcel在Web网站中读写Excel ...

  7. Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

    Java读写Excel之HSSFWorkbook.XSSFWorkbook.Workbook 引入maven依赖 <dependency><groupId>org.apache ...

  8. java xlsx读写_Java读写Excel

    Java读写Excel 工作中经常需要对Excel进行读写操作,java操作excel文件比较流行的是apache poi包,excel分为xls(2003)和xlsx(2007)两种格式,操作这两种 ...

  9. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

最新文章

  1. Yii ActiveRecord 的via和viaTable示例
  2. spring mybatis 集成
  3. mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)
  4. ue4 怎么修改骨骼动画_UE4换装系统(合并骨骼模型)
  5. Pytorch笔记:维度dim的定义及其理解使用
  6. 云原生 | .NET 5 with Dapr 初体验
  7. 嵌入式linux的学习笔记-pipe管道(二)
  8. Hadoop tutorial - 3 Hello MapReduce- 2015-3-30
  9. 保研论坛app服务器网站,保研论坛官网版app
  10. 2020年ACM算法竞赛夏季短学期 任务安排
  11. 如何使用迭代器Iterator与增强for循环遍历Map集合?
  12. Bellman 贝尔曼方程究竟是什么
  13. 抖音表情包小程序,抖音广告流量主玩法
  14. 为什么NFT的头像卖这么贵?这与IPFS/FIL有什么联系
  15. python提取图片文字视频教学_Python学习第七天之爬虫的学习与使用(爬取文字、图片、 视频)...
  16. ToF相机从Camera2 API中获取DEPTH16格式深度图
  17. .NET 控件集 ComponentOne 2018V2正式发布,提供轻量级的 .NET BI 仪表板
  18. 打印某个月份的日历表!
  19. 基于JavaWeb的酒店客房预定管理系统
  20. python基础项目实战--图片转字符

热门文章

  1. ScalavsKotlin
  2. julia 数组类型转换_在Julia中确定类型的超类型
  3. c# 2维数组 取一维_C#| 不同类型的一维数组声明
  4. linux 文件浏览器_浏览Linux文件系统
  5. Java ByteArrayOutputStream size()方法与示例
  6. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!
  7. IMP-00002: 无法打开 D:\orcldat\test_20111024.dmp 进行读取,rman备份
  8. 51单片机 16*64LED单红点阵屏驱动测试,上位机改字软件免费版
  9. 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
  10. python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决