Java使用POI导出Excel文件

article/2025/9/30 11:33:48

Java使用POI导出Excel文件

  • POI概述
  • Apache POI 下载
    • 依赖引用关系图如下所示:
    • 直接下载
    • Maven下载
  • POI实例
  • 总结

POI概述

HSSF 是 POI 项目的 Excel '97(-2007) 文件格式的纯 Java 实现。XSSF 是 POI 项目的 Excel 2007 OOXML (.xlsx) 文件格式的纯 Java 实现。
HSSF 和 XSSF 提供了读取电子表格创建、修改、读取和写入 XLS 电子表格的方法。他们提供:
为有特殊需要的人提供的低级结构
用于高效只读访问的 eventmodel api
用于创建、读取和修改 XLS 文件的完整用户模型 API
对于从纯 HSSF 用户模型转换的人,如果希望使用联合 SS 用户模型来支持 HSSF 和 XSSF,请参阅ss 用户模型转换指南。
生成电子表格的另一种方法是通过Cocoon序列化程序(但您仍将间接使用 HSSF)。使用 Cocoon,您可以通过简单地应用样式表并指定序列化程序来序列化任何 XML 数据源(例如,可能是用 SQL 输出的 ESQL 页面)。
如果您只是读取电子表格数据,请使用 org.apache.poi.hssf.eventusermodel 包或 org.apache.poi.xssf.eventusermodel 包中的 eventmodel api,具体取决于您的文件格式。
如果您正在修改电子表格数据,请使用 usermodel api。您也可以通过这种方式生成电子表格。
请注意,usermodel 系统比低级 eventusermodel 具有更高的内存占用,但主要优点是使用起来更简单。另请注意,由于新的 XSSF 支持的 Excel 2007 OOXML (.xlsx) 文件是基于 XML 的,因此处理它们的内存占用高于旧的 HSSF 支持的 (.xls) 二进制文件。
SXSSF(自 POI 3.8 beta3 起)
POI官方文档

Apache POI 下载

依赖引用关系图如下所示:

在这里插入图片描述

直接下载

点击进入官网下载Apache POI
在这里插入图片描述

Maven下载

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version>
</dependency>

POI实例

    @RequestMapping("/downloadExcel")public void downloadExcel(HttpServletResponse response) throws Exception{//创建Excel文件Workbook wb = new HSSFWorkbook();//生成sheetSheet sheet = wb.createSheet("POI测试sheet");//创建行Row row = null;//创建列Cell cell = null;//创建表头单元格样式CellStyle cs_header = wb.createCellStyle();//设置字体样式Font boldFont = wb.createFont();//设置文字类型boldFont.setFontName("宋体");//设置加粗boldFont.setBold(true);//设置文字大小boldFont.setFontHeightInPoints((short) 16);//应用设置的字体cs_header.setFont(boldFont);//设置边框下、左、右、上cs_header.setBorderBottom(BorderStyle.THIN);cs_header.setBorderLeft(BorderStyle.THIN);cs_header.setBorderRight(BorderStyle.THIN);cs_header.setBorderTop(BorderStyle.THIN);//水平居中cs_header.setAlignment(HorizontalAlignment.CENTER);//垂直居中cs_header.setVerticalAlignment(VerticalAlignment.CENTER);//前景填充色cs_header.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);//设置前景填充样式cs_header.setFillPattern(FillPatternType.SOLID_FOREGROUND);//设置标题row = sheet.createRow(0);//设置单元格行高row.setHeightInPoints(24);//设置标题String[] headers=new String[]{"type字段ID标题","types字段ID标题","depName字段标题","offName标题","cDepIds字段标题","battleLineId字段标题","cardNumber字段标题","userId字段标题","startDate字段标题","endDate字段标题","cpName字段标题","isStorageList字段标题 与 powerUser字段标题"};//逐个设置标题样式for (int i = 0; i < headers.length; i++) {//创建单元格cell = row.createCell(i);//设置单元格内容cell.setCellValue(headers[i]);//设置单元格样式cell.setCellStyle(cs_header);}//创建文本单元格样式CellStyle cs_text = wb.createCellStyle();//创建文字设置Font textFont = wb.createFont();//设置文字类型textFont.setFontName("Consolas");//设置文字大小textFont.setFontHeightInPoints((short) 10);//应用设置cs_text.setFont(textFont);//设置边框cs_text.setBorderBottom(BorderStyle.THIN);cs_text.setBorderLeft(BorderStyle.THIN);cs_text.setBorderRight(BorderStyle.THIN);cs_text.setBorderTop(BorderStyle.THIN);//水平居中cs_text.setAlignment(HorizontalAlignment.CENTER);//垂直居中cs_text.setVerticalAlignment(VerticalAlignment.CENTER);//调取数据List<WzPickingApply> list = wzPickingApplyService.selectWzPickingApplyList();//记录总共多少列(由于接口查询出来的实体类集合,所以不好循环,使用)Integer cellSum = 0;//将数据写入表格for(int i=0; i<list.size(); i++){//将实体类集合转成string数组,通过‘,’,获取总共多少列String[] split = list.get(i).toString().split(",");cellSum=split.length;//创建行,由于0行是标题,所以+1row = sheet.createRow(i+1);//实体类集合不太好循环,所以逐一设置,如果是其他则可使用for循环WzPickingApplyVo wpa = (WzPickingApplyVo) list.get(i);row.createCell(0).setCellValue(wpa.getType()!=null?wpa.getType():'1');row.createCell(1).setCellValue(wpa.getTypes()!=null?wpa.getTypes():'2');row.createCell(2).setCellValue(wpa.getDepName()!=null?wpa.getDepName():"3");row.createCell(3).setCellValue(wpa.getOffName()!=null?wpa.getOffName():"4");row.createCell(4).setCellValue(String.valueOf(wpa.getCDepIds()!=null?wpa.getCDepIds():"5"));row.createCell(5).setCellValue(wpa.getBattleLineId()!=null?wpa.getBattleLineId():'6');row.createCell(6).setCellValue(wpa.getCardNumber()!=null?wpa.getCardNumber():"7");row.createCell(7).setCellValue(wpa.getUserId()!=null?wpa.getUserId():'8');SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");row.createCell(8).setCellValue(String.valueOf(wpa.getStartDate()!=null?wpa.getStartDate():df.format(Calendar.getInstance().getTime())));row.createCell(9).setCellValue(String.valueOf(wpa.getEndDate()!=null?wpa.getEndDate():df.format(Calendar.getInstance().getTime())));row.createCell(10).setCellValue(wpa.getCpName()!=null?wpa.getCpName():"9");row.createCell(11).setCellValue(String.valueOf(wpa.getIsStorageList()!=null?wpa.getIsStorageList():"10"));row.createCell(12).setCellValue(String.valueOf(wpa.getPowerUser()!=null?wpa.getPowerUser():"11"));//为每一个单元格设置样式for (int j=0;j<cellSum;j++){row.getCell(j).setCellStyle(cs_text);}}//合并单元格,横向sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 11, 12));sheet.addMergedRegionUnsafe(new CellRangeAddress(1,1,3,4));//竖着合并sheet.addMergedRegionUnsafe(new CellRangeAddress(1,list.size(),4,4));//设置单元格宽度自适应for (int i = 0; i <= cellSum; i++){sheet.autoSizeColumn((short)i,true); //自动调整列宽}//设置中文文件名称String fileName = URLEncoder.encode("POIExcel下载测试","UTF-8");//浏览器默认服务器传过去的是html,不是excel文件//设置响应类型:传输内容是流,并支持中文response.setContentType("application/octet-stream;charset=UTF-8");//设置响应头信息header,下载时以文件附件下载response.setHeader("Content-Disposition","attachment;filename="+fileName+".xls");//输出流对象OutputStream os = response.getOutputStream();wb.write(os);//强制刷新os.flush();os.close();wb.close();}

总结

目前这仅是讲解使用,如果做项目,封装一下更灵活,便于使用。


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

相关文章

Java用POI导出Excel表格中的数据

poi操作Excel 主要通过HSSF,XSSF两种方式。 HSSF只能解析.xls格式的excel文件&#xff0c;XSSF支持.xls与.xlsx两种格式。 功能&#xff1a; 传递一个Excel文件&#xff0c;拿到里面所有的数据&#xff0c;返回一个集合。 Excel中的数据是什么类型&#xff0c;就返回什么类型的…

springboot+poi导出excel

在web开发中经常遇到将数据写入excel并导出的需求&#xff0c;下面整理springbootpoi实现导出excel的实例。 搭建springboot工程&#xff0c;引入依赖&#xff0c;细节不在赘述。 引入poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId…

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, …