浏览器生成Excel文件 ,Apache POI 使用方法及示例

Apache POI 是 Apache 软件基金会的开源项目,它提供 API 用于读取和写入 Microsoft Office 格式的文件,如 Excel、Word 等。在 Spring Boot 应用中,结合使用 Apache POI 可以方便地处理 Excel 文件

一 引入依赖:
        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>

二 读取Excel示例:

import org.apache.poi.ss.usermodel.*; // 导入Apache POI的通用接口  
import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 导入用于处理.xlsx文件的类  import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  public class ExcelReader {  public static void main(String[] args) {  try (FileInputStream fis = new FileInputStream(new File("path/to/your/excel/file.xlsx"))) {  // 创建一个工作簿对象,从输入流中读取Excel文件  Workbook workbook = new XSSFWorkbook(fis);  // 获取第一个工作表  Sheet sheet = workbook.getSheetAt(0);  // 遍历工作表中的所有行  for (Row row : sheet) {  // 遍历行中的所有单元格  for (Cell cell : row) {  // 获取单元格的值,并打印  String cellValue = getCellValueAsString(cell);  System.out.print(cellValue + "\t"); // \t 是制表符,用于分隔单元格内容  }  System.out.println(); // 每行结束后换行  }  // 关闭工作簿  workbook.close();  } catch (IOException e) {  // 如果发生IO异常,打印堆栈跟踪  e.printStackTrace();  }  }  /**  * 根据单元格类型获取单元格的值,并返回字符串表示  *  * @param cell 要获取值的单元格  * @return 单元格值的字符串表示  */  private static String getCellValueAsString(Cell cell) {  switch (cell.getCellType()) {  case STRING:  return cell.getStringCellValue(); // 字符串类型直接返回  case NUMERIC:  if (DateUtil.isCellDateFormatted(cell)) {  return DateUtil.formatCellValueToDate(cell).toString(); // 日期类型格式化为字符串  } else {  return Double.toString(cell.getNumericCellValue()); // 数字类型转换为字符串  }  case BOOLEAN:  return Boolean.toString(cell.getBooleanCellValue()); // 布尔类型转换为字符串  case FORMULA:  return cell.getCellFormula(); // 公式类型返回公式字符串  default:  return ""; // 其他类型返回空字符串  }  }  
}

三 写入Excel示例:

import org.apache.poi.ss.usermodel.*; // 导入Apache POI的通用接口  
import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 导入用于处理.xlsx文件的类  import java.io.FileOutputStream;  
import java.io.IOException;  public class ExcelWriter {  public static void main(String[] args) {  // 创建一个新的工作簿对象  Workbook workbook = new XSSFWorkbook();  // 在工作簿中创建一个名为"Sheet1"的工作表  Sheet sheet = workbook.createSheet("Sheet1");  // 在工作表中创建第一行  Row row = sheet.createRow(0);  // 在第一行中创建第一个单元格,并设置其值为"Hello, World!"  Cell cell = row.createCell(0);  cell.setCellValue("Hello, World!");  try (FileOutputStream fos = new FileOutputStream("path/to/your/output/excel/file.xlsx")) {  // 将工作簿的内容写入输出流,即写入文件  workbook.write(fos);  // 刷新输出流,确保所有数据都写入文件  fos.flush();  } catch (IOException e) {  // 如果发生IO异常,打印堆栈跟踪  e.printStackTrace();  } finally {  try {  // 关闭工作簿,释放资源  workbook.close();  } catch (IOException e) {  // 如果关闭工作簿时发生异常,打印堆栈跟踪  e.printStackTrace();  }  }  }  
}

四 浏览器下载Excel示例(api示例):

import org.apache.poi.xssf.usermodel.XSSFRow;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
import org.springframework.http.HttpStatus;  
import org.springframework.http.ResponseEntity;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  import javax.servlet.http.HttpServletResponse;  
import java.io.IOException;  
import java.util.ArrayList;  
import java.util.List;  @RestController  
public class StudentExcelController {  @GetMapping("/exportStudents")  public ResponseEntity<Void> exportStudents(HttpServletResponse response) throws IOException {  // 创建Excel文档  XSSFWorkbook workbook = new XSSFWorkbook();  XSSFSheet sheet = workbook.createSheet("学生信息");  // 创建表头  XSSFRow header = sheet.createRow(0);  header.createCell(0).setCellValue("姓名");  header.createCell(1).setCellValue("学号");  header.createCell(2).setCellValue("班级");  header.createCell(3).setCellValue("成绩");  // 填充数据  List<Student> students = getStudentList();  int rowIndex = 1;  for (Student student : students) {  XSSFRow row = sheet.createRow(rowIndex++);  row.createCell(0).setCellValue(student.getName());  row.createCell(1).setCellValue(student.getStudentId());  row.createCell(2).setCellValue(student.getClassName());  row.createCell(3).setCellValue(student.getScore());  }  // 设置响应头信息  response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");  response.setHeader("Content-Disposition", "attachment; filename=students.xlsx");  // 将Excel文档写入响应流中  workbook.write(response.getOutputStream());  workbook.close(); // 记得关闭workbook  return new ResponseEntity<>(HttpStatus.OK);  }  // 模拟获取学生数据  private List<Student> getStudentList() {  List<Student> students = new ArrayList<>();  students.add(new Student("张三", "20230001", "一班", 90));  students.add(new Student("李四", "20230002", "二班", 85));  students.add(new Student("王五", "20230003", "三班", 92));  return students;  }  // 学生实体类  static class Student {  private String name;  private String studentId;  private String className;  private double score;  public Student(String name, String studentId, String className, double score) {  this.name = name;  this.studentId = studentId;  this.className = className;  this.score = score;  }  public String getName() {  return name;  }  public String getStudentId() {  return studentId;  }  public String getClassName() {  return className;  }  public double getScore() {  return score;  }  }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Llama 3大模型发布!快速体验推理及微调

Meta&#xff0c;一家全球知名的科技和社交媒体巨头&#xff0c;在其官方网站上正式宣布了一款开源的大型预训练语言模型——Llama-3。 据了解&#xff0c;Llama-3模型提供了两种不同参数规模的版本&#xff0c;分别是80亿参数和700亿参数。这两种版本分别针对基础的预训练任务…

2024mac苹果电脑如何清理磁盘空间?用什么软件最好

苹果电脑已成为我们日常生活和工作不可或缺的一部分。随着时间的推移&#xff0c;不论是办公文档、个人照片还是各式各样的应用程序&#xff0c;都会逐渐积累&#xff0c;导致电脑的磁盘空间日益紧张。对于用户来说&#xff0c;苹果电脑如何清理磁盘空间&#xff0c;以保持设备…

博客摘录「 自动微分----pytorch中的梯度运算与反向传播函数(预备知识)5」2024年4月18日

Python控制流的梯度计算 使用自动微分的一个好处是&#xff1a; 即使构建函数的计算图需要通过Python控制流&#xff08;例如&#xff0c;条件、循环或任意函数调用&#xff09;&#xff0c;我们仍然可以计算得到的变量的梯度。 在下面的代码中&#xff0c;while循环的迭代次数…

【2024年最新】NodeMCU-ESP8266刷AT固件教程——适用于esp-12E和esp-12F

硬件图片 原理图 0、工具打包下载 工具包 密码:keduo 1、工具及固件下载 固件下载地址&#xff1a; 欢迎 | 安信可科技 (ai-thinker.com) 下载以下固件&#xff1a; 直接下载地址&#xff1a;AT 固件&#xff08;固件号&#xff1a;0781&#xff09; 下载以下工具&#xf…

使用Nexus搭建npm私服库

优质博文&#xff1a;IT-BLOG-CN 【1】下载nexus http://www.sonatype.com/download-oss-sonatype解压到本地即可&#xff1b; 【2】打开nexus-3.2.0-01-win64\nexus-3.2.0-01\bin&#xff1b;打开cmd&#xff08;必须使用cmd&#xff09; 执行nexus.exe /run&#xff1b;需要使…

Oracle数据库从入门到精通系列之二十一:Oracle 19c数据库增加重做日志大小

Oracle数据库从入门到精通系列之二十一:Oracle 19c数据库增加重做日志大小 一、概述二、推荐配置三、实施步骤在此最佳实践中,我们增加了 Oracle 重做日志的大小以提高数据库性能。适当调整数据库重做日志的大小可以减少数据库中的等待事件,从而优化数据库系统。 一、概述 …

【LeetCode热题100】【链表】随机链表的复制

题目链接&#xff1a;138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点&#xff0c;请你深拷贝这个链表 非常妙的思路&…

浏览器CSS兼容性问题解决方案整理

1、CSS Hack 使用 hacker 可以把浏览器分为3类&#xff1a;IE6&#xff1b;IE7和遨游&#xff1b;其他&#xff08;IE8 Chrome ff Safari opera等&#xff09; &#xff08;1&#xff09;IE6认识的 hacker 是 下划线 _ 和星号 * &#xff08;2&#xff09;IE7和遨游认识的 hac…

LeetCode第53题:最大子数组和【python 5种算法】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析可视化:企业实战案例 题目描述 给定一个整数数组 n…

Tomcat弱口令及war包漏洞复现(保姆级教程)

1.环境搭建 靶机&#xff1a;Ubuntu 安装参考&#xff1a;安装Ubuntu详细教程_乌班图安装教程-CSDN博客 vulhub docker搭建tomcat漏洞环境 参考&#xff1a;vulhub docker靶场搭建-CSDN博客 工具&#xff1a;burpsuite 2.漏洞复现 2.1弱口令爆破 进入http://192.168.143…

Linux Kernel入门到精通系列讲解(QEMU-虚拟化篇) 2.1 新增加一个RISC-V CPU(NARUTO-PI)

1. 概述 上一章节我们讲解了开源的QEMU 开发板怎么启动,从这章节开始,我们将会亲手去从无到有开发一个CPU,它包括CPU Core,Memory Device,Communication Controller和Device等等。 注意,本章节中调用的很多自定义宏都在include/hw/riscv/naruto.h文件,这里我就不展开说…

深入探索STM32高级定时器:TIM高级定时器的神奇应用

深入探索STM32高级定时器&#xff1a;TIM高级定时器的神奇应用 在STM32微控制器中&#xff0c;高级定时器&#xff08;TIM&#xff0c;Timer&#xff09;是一种功能强大、灵活多样的定时器模块&#xff0c;提供了更多的功能和配置选项&#xff0c;适用于各种复杂的定时和计时需…

分类神经网络2:ResNet模型复现

目录 ResNet网络架构 ResNet部分实现代码 ResNet网络架构 论文原址&#xff1a;https://arxiv.org/pdf/1512.03385.pdf 残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的&#xff0c;通过引入残差学习解决了深度网络训练中的退化问题&#xff…

IO实现方式(同步阻塞、同步非阻塞、IO多路复用)

1. 同步阻塞IO 同步阻塞io在数据在数据拷贝到两个阶段都是阻塞的&#xff0c;即把socket的数据拷贝到内核缓冲区和把内核缓冲区的数据拷贝到用户态到应用程序缓冲区都是阻塞的。用户线程在这个期间不能处理其他任务。 优点&#xff1a;简单易用 缺点&#xff1a;为每一次io请…

VScode远程连接虚拟机提示: 无法建立连接:XHR failed.问题解决方案

一问题描述 在vscode下载插件Remote-SSH远程连接虚拟机时提示无法建立连接 二.最大嫌疑原因&#xff1a; 我也是在网上找了许久&#xff0c;发现就是网络原因&#xff0c;具体不知&#xff0c;明明访问别的网页没问题&#xff0c;就是连不上&#xff0c;然后发现下载vscode的…

【电赛】自制模块2——偏置变幅器

一、理论基础 模电学习笔记——集成运算放大器https://mp.csdn.net/mp_blog/creation/editor/134449862 运放单双电源转换/运放单双电源供电详解https://mp.csdn.net/mp_blog/creation/editor/135884117 通过改变R4或R5的阻值改变正弦波的振幅。 根据公式 A表示放大倍数。 …

MAC上如何将某个目录制作成iso格式磁盘文件,iso文件本质是什么?以及挂载到ParallelDesktop中?(hdiutil makehybrid )

背景 ParallelsDesktop没有安装ParallelsTools的无法共享目录&#xff0c;可以通过ParallelsDesktop提供CD磁盘的方式共享进去 命令 # 准备文档 mkdir mytestdir cp xxx mytestdir# 生成iso hdiutil makehybrid -o output.iso mytestdir -iso -joliethdiutil是MAC提供的磁盘…

大白话!go语言中的指针、指针类型的方法接收器

go语言中的指针使用起来的比较简单。应用如下&#xff1a; 1.普通的对象取地址&#xff0c;获取对象值 符号&&#xff0c;取地址符&#xff0c;可以取变量的地址&#xff0c;或结构体对象的地址等。符号*&#xff0c;是从地址中取值&#xff08;根据栈中存储地址&#xf…

Oracle中的视图

1- 什么是视图 视图是一个虚拟表 视图是由sql查询语句产生的 视图真实存在 但是不存储数据 视图中的数据 只是对 基表(源数据表) 中的数据的引用 总的来说 视图可以简化数据 用户&#xff0c;订单&#xff0c;物流 三个表进行关联 吧很复杂的sql查询语句存储成一个视图 …

【数据仓库工具箱】DW/BI系统的核心元素和基本要求

核心元素 DW/BI 环境划分为4个不同的&#xff0c;各具特色的组成部分。分别是&#xff1a;操作型源数据&#xff0c;ETL系统&#xff0c;数据展现和商业智能应用。 操作型源数据 记录的是操作型系统&#xff0c;用于获取业务事务。源数据关注的是处理性能和可用性。源系统一般…