【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.pswp.cn/web/10437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10437.shtml
英文地址,請注明出處:http://en.pswp.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 <…