【Apache POI】Apache POI-操作Excel表格-简易版

Catalog

  • Apache POI-操作Excel表格
    • 1. 需求
    • 2. 优点
    • 3. 缺点
    • 4. 应用场景
    • 5. 使用方法
    • 6. SpringBoot工程中处理Excel表格
    • 7. Demo示例

Apache POI-操作Excel表格

1. 需求

大多数项目的在运营过程中,会产生运营数据,如外卖系统中需要统计每日的订单完成数、每种菜品的销量等数据,这些都是商家关心的事情,如果可以将这些数据整理成Excel表格,可以让商家更直观地了解到这些数据。

Apache POI这个开源项目就可以用于处理微软各式各样的文件,如读、写、创建文件等,这里主要介绍的是如何处理Excel文件。

2. 优点

  • 开源免费:不需要侧重关心数据安全等方面的问题。
  • 跨平台:Apache POI是使用Java语法编写的,在任何支持Java语言的平台下面都可以使用。
  • 容易集成:在springboot项目中使用起来非常方便。

3. 缺点

  • 操作繁琐:Apache POI中丰富的api,增加了使用的难度
  • 性能:处理大型Excel文件的时候,会大量占用内存
  • 不支持新功能:无法及时同步Excel这个软件更新的功能

4. 应用场景

  1. 数据导入导出:Apache POI可用于从数据库导出数据到Excel文件,或者从Excel文件中读取数据并导入到数据库中。
  2. 报表生成:可以使用Apache POI创建自定义的Excel报表,包括图表、数据分析和格式化等功能。
  3. 数据处理:可以利用Apache POI对Excel文件中的数据进行处理和分析,如数据清洗、转换和计算等。

5. 使用方法

Apache POI中提供的api处理Excel表格的大多数逻辑都和直接使用Excel(微软)这个软件类似。

在大多数通过Java程序来操作Excel表格的场景中,由于Excel的样式较为复杂,通过Java程序来设计样式会很繁琐,所以大多数的应用场景都是先通过微软的Excel这个软件,先将Excel的样式设计好,如设计表格头的标题、字体大小、合并单元格和颜色等保存为模板文件到项目工程的resource目录下面,再通过反射(输出流)获取到resource目录下的资源文件(Excel模板文件)。

最后,直接在模板文件中填充从数据库中处理好的数据即可。

6. SpringBoot工程中处理Excel表格

  1. 导入Maven坐标

     <!--导入POI坐标--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version></dependency><!--用作测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
    
  2. 获取输入流(获取Excel文件)

  3. 获取Sheet页(可设置Sheet的名称)

  4. 获取行(可直接获取最后一行有内容的行号, 最后一行的行号从0开始的)

  5. 获取列(可直接获取最后一列有内容的行号,最后一行的列号从1开始的)

  6. 对Excel文件进行读写操作

  7. 获取输出流(将Excel文件保存到磁盘上或者输出到浏览器上面)

7. Demo示例

/*** 基于POI向Excel文件中写入数据*/@Testpublic void writeExcel() throws IOException {//在内存中创建Excel文件XSSFWorkbook excel = new XSSFWorkbook();//创建sheet页XSSFSheet sheet = excel.createSheet("user");//创建行XSSFRow row0 = sheet.createRow(0);XSSFRow row1 = sheet.createRow(1);XSSFRow row2 = sheet.createRow(2);//创建列row0.createCell(0).setCellValue("name");row0.createCell(1).setCellValue("age");row1.createCell(0).setCellValue("aimin");row1.createCell(1).setCellValue("22");row2.createCell(0).setCellValue("Tony");row2.createCell(1).setCellValue("22");//存入磁盘//创建输出流,文件路径写自己的FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\WORKSPACE-Java\\normal-project\\Apache_POI_test\\files\\info.xlsx"));excel.write(fileOutputStream);//关闭资源fileOutputStream.flush();fileOutputStream.close();excel.close();}/*** 基于POI读取Excel中的数据*/@Testpublic void readExcel() throws Exception{//通过输入流获取Excel文件,文件路径写自己的XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("D:\\WORKSPACE-Java\\normal-project\\Apache_POI_test\\files\\info.xlsx")));//获取sheet页XSSFSheet sheet = excel.getSheet("user");//获取最后一行有内容的行号,用于后期遍历,行号从0开始,列号从1开始int lastRowNum = sheet.getLastRowNum();//System.out.println("最后一行的行号:" + lastRowNum);for (int i = 0; i <= lastRowNum; i++) {//获取行XSSFRow row = sheet.getRow(i);//获取有内容的最后一列的列号short lastCellNum = row.getLastCellNum();//System.out.println("最后一列的列号:" + lastRowNum);for (int j = 0; j < lastCellNum; j++) {System.out.print(row.getCell(j) + " ");}System.out.println();}//关闭流excel.close();}

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

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

相关文章

SpringBoot实现图片验证码

引入依赖 <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version> </dependency>代码实现 package com.qiangesoft.captcha.controller;import com.wf.captcha.*…

最少数量线段覆盖-华为OD

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给定坐标轴上的一组线段&#xff0c;线段的起点和终点均为整数…

C++:类与对象—继承

类与对象—继承 一、继承是什么&#xff1f;二、继承定义三、基类和派生类对象赋值转换四、继承中的作用域五、派生类的默认成员函数六、继承与友元七、继承与静态成员八、复杂的菱形继承及菱形虚拟继承九、继承的总结和反思十、考察重点 一、继承是什么&#xff1f; 继承(inh…

知识付费系统需要哪些资质要求,教育机构教务工作计划内容有哪些?

每个培训教育机构都是由很多人员组成&#xff0c;作为教育机构&#xff0c;老师不必须&#xff0c;是必不可少的&#xff0c;但是除了老师之外还得配备一定数量的销售人员和教务工作者&#xff0c;教务老师其实也就是搞后勤的&#xff0c;但是是必须的&#xff0c;那么教育机构…

Java的时间类

1. 日期类 1.1 第一代日期类 1) Date: 精确到毫秒&#xff0c;代表特定的瞬间 2) SimpleDateFormat: 格式和解析日期的类 SimpleDateFormat 格式化和解析日期的具体类。它允许进行格式化(日期-→>文本)、解析(文本->日期)和规范化. import java.text.ParseExce…

Java基础(27)Web应用中web.xml文件中可以配置哪些内容

在Java Web应用中&#xff0c;web.xml文件&#xff08;也被称为部署描述符&#xff09;是一个核心的配置文件&#xff0c;它位于应用的WEB-INF目录下。web.xml文件中可以配置多种不同的组件和参数&#xff0c;它们用来定义和调整应用的行为。以下是一些web.xml中可以配置的内容…

Web3 Tools - 助记词生成(完整代码)

工具介绍 Web3Tools - 助记词生成 完整代码 代码路径 import React, { useState } from react; import Grid from mui/material/Grid; import Paper from mui/material/Paper; import Typography from mui/material/Typography; import Button from mui/material/Button; i…

接口自动化测试很难掌握吗?

一. 什么是接口测试 接口测试是一种软件测试方法&#xff0c;用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中&#xff0c;测试人员会发送请求并检查接收到的响应&#xff0c;以确保接口在不同场景下都能正常工作。 就工具而言&#xff0c;常见的测试工具有…

AI+招聘:ATS招聘系统让HR简历筛选精准度达95%!

一提起招聘过程&#xff0c;许多HR就会想到那堆叠如山的简历、让人眼花缭乱的招聘网站以及琐碎繁复的手动数据录入。据统计&#xff0c;平均每位HR每年要处理数百甚至上千份简历&#xff0c;耗费大量精力在初级筛选和跟进上。   市场调查机构近日发布的一份报告显示&#xff…

【深度学习】YOLO源码中的mAP计算代码的理解笔记(大部分代码逐行+基础解释)

提示&#xff1a;本篇博客是在阅读了YOLO源码中的mAP计算方法的代码后加上官方解释以及自己的debug调试理解每一步是怎么操作的。由于是大部分代码进行了逐行解释&#xff0c;所以篇幅过长。 文章目录 前言一、输入格式处理1.1 转换公式二、init&#xff1a;初始化2.1 iouv2.2 …

AND Sorting题解

AND Sorting题解 AND Sorting 详细 题解()题目原意解题思路这是代码🐬ZZZB. AND Sorting(我也是有底线的)AND Sorting 详细 题解() 洛谷 原题,CF 原题 洛谷 AC记录,CF AC记录 题目原意 给你一个由从 0 0 0 到 n − 1 n-1 n−1 的整数组成的排列 p p p (每个整数都…

如何在没有头文件的情况下调用动态库的类的私有成员函数

如何在没有头文件的情况下调用动态库的类成员函数 编写一个不存在虚函数的类测试代码 _ZN6CClass4showEv如何获取调用 源代码 https://github.com/TonyBeen/study/tree/master/dlopen 编写一个不存在虚函数的类 // class.h #pragma onceclass CClass { public:CClass();~CCla…

【Leetcode每日一题】 综合练习 - 电话号码的字母组合(难度⭐⭐)(75)

1. 题目解析 题目链接&#xff1a;电话号码的字母组合 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法设计思路 在解决这类问题时&#xff0c;我们需要认识到每个位置上的数字对应的字符集合是相互独立的&#…

什么是翘尾因素

在有关CPI 的分析文章和新闻稿件中&#xff0c;经常会出现“翘尾因素”或“翘尾影响” 等词汇&#xff0c;这是分析同比价格指数变动幅度时所特有的概念。那么什么是“翘尾因素” 或“翘尾影响”呢&#xff1f; 一、什么是翘尾因素 “翘尾因素”是指上年价格上涨&#xff08;…

使用scrollIntoView滚动元素到可视区域

1. 实现效果 点击顶部标签栏&#xff0c;让对应的内容出现在可视区域&#xff1a; 2. scrollIntoView () scrollIntoView 是一个内置的 JavaScript 方法&#xff0c;用于将元素滚动到视口可见的位置。它通常用于用户界面中&#xff0c;以便用户能轻松看到特定的元素。此方…

perf 中的 cpu-cycles event 介绍

perf 中的 cpu-cycles event 介绍 cycles简介 cycles事件记录处理器核心执行的时钟周期数。每个时钟周期代表处理器内部时钟振荡器的一个周期。这个事件通常用于衡量处理器的执行速度&#xff0c;因为它直接反映了指令执行所需的时间。一个较高的cycles计数可能意味着代码执行…

JavaScript中指定大小分割数组的一种实现

今天分享一个使用JavaScript分割数组为多个自数组的方法实现。我使用它的场景如下&#xff1a; 给定一个数组 arr 和指定大小 fixed&#xff1a; const arr [{id: 1,name: name1},{id: 2,name: name2},{id: 3,name: name3},{id: 4,name: name4},{id: 5,name: name5},{id: 6,…

2024版本idea集成SpringBoot + Ai 手写一个chatgpt 【推荐】

题目&#xff1a;SpringBoot OpenAi 在这里获取key和url&#xff1a;获取免费key base-url为这两个&#xff1a; 话不多说直接来&#xff01; 一、简介 Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则&#xff08;如可移植性和模块化设计&#xff…

暗区突围pc资格 暗区突围pc端测试资格获取

《暗区突围》的诞生&#xff0c;仿佛在游戏界投下了一枚深水炸弹&#xff0c;它不仅仅是射击游戏的新标杆&#xff0c;更是对玩家策略思维、生存直觉与团队协作能力的一次全面考验。在这个精心构建的虚拟战场中&#xff0c;每一次踏入暗区&#xff0c;都是对未知的探索&#xf…

【练习4】

1.两数之和 暴力&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();vector<int> res(2, -1); // 初始化结果为-1for (int i 0; i < n; i) {int temp nums[i];for (int j i 1; j <…