JavaWeb(蒼穹外賣)--學習筆記18(Apache POI)

前言

本篇文章是學習B站黑馬程序員蒼穹外賣的學習筆記📑。我的學習路線是Java基礎語法-JavaWeb-做項目,管理端的功能學習完之后,就進入到了用戶端微信小程序的開發,用戶端開發的流程大致為用戶登錄—商品瀏覽(其中涉及到緩存,之前寫過)—添加/查看/清空購物車—下單支付(到現在沒搞懂😵?💫)—地址簿—訂單查詢/超時/取消處理(巨多)…還有我沒學到的🤪🤪,統計功能實現之后,為了方便商家了解運營數據,我們一般以Excel表格的形式呈現出我們想要的數據,方便觀看。

🙌先來認識一個新工具—Apache POI?

Apache POI(Poor Obfuscation Implementation)是 Apache 軟件基金會的一個開源 Java 庫。它的主要功能是讀取、創建和操作 Microsoft Office 格式的文件,特別是:

Excel 文件(.xls 和 .xlsx)
Word 文件(.docx)
PowerPoint 文件(.pptx)
以及其他一些 Office 格式(如 Visio .vsd 等)

通過一個測試代碼來看一下怎么使用Apache POI來創建Excel表格🤔

👍通過POI創建Excel文件并且寫入文件指定內容

  1. 導入Maven
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId>
</dependency>
  1. 創建測試類:
package com.sky.test;...public class POITest {/** 通過POI創建Excel文件并且寫入文件內容* */@Testpublic void writeTest() throws IOException {//在內存中創建一個Excel文件XSSFWorkbook excel = new XSSFWorkbook();//在Excel文件中創建一個Sheet頁XSSFSheet sheet = excel.createSheet("info");//在Sheet中創建行對象,rownum編號從0開始XSSFRow row = sheet.createRow(1); //1代表第2行row.createCell(1).setCellValue("姓名");//創建單元格寫入內容row.createCell(2).setCellValue("城市");//創建一個新行row = sheet.createRow(2);//第3行row.createCell(1).setCellValue("hhh");//創建單元格寫入內容row.createCell(2).setCellValue("xxx");row = sheet.createRow(3);//第4行row.createCell(1).setCellValue("hhhh");//創建單元格寫入內容row.createCell(2).setCellValue("xxxx");//上面寫的都是在內存,現在想在磁盤看到FileOutputStream out = new FileOutputStream(new File("D://hhh/hhhh.xlsx"));//設置文件excel.write(out);//寫入到文件//關閉資源out.close();excel.close();}
}

來看看實現:
在這里插入圖片描述

??將讀取磁盤上已經存在的Excel文件

@Test
public void readTest() throws IOException{FileInputStream in = new FileInputStream(new File("D://hhh/hhhh.xlsx"));//讀取磁盤上已經存在的Excel文件XSSFWorkbook excel = new XSSFWorkbook(in);//讀取Excel文件中的第一個Sheet頁XSSFSheet sheet = excel.getSheetAt(0);//獲取Sheet中最后一行行號int lastRowNum = sheet.getLastRowNum();for(int i=1;i<=lastRowNum;i++){//獲得某一行XSSFRow row = sheet.getRow(i);//獲得單元格對象String cellValue1 = row.getCell(1).getStringCellValue();String cellValue2 = row.getCell(2).getStringCellValue();System.out.println(cellValue1+" "+cellValue2);}//關閉資源in.close();}

來看看實現:
在這里插入圖片描述

?我用ai總結了一下上面所用的Apache POI 組件,每個組件針對特定的 Office 格式或技術::

1. XSSFWorkbook:

用途: 代表一個 Excel .xlsx 格式的工作簿(整個文件)。它是所有操作的起點和容器。無論是讀還是寫,都需要先創建或加載一個 XSSFWorkbook 實例。

寫入: 使用 new XSSFWorkbook() 在內存中創建一個新的工作簿。
讀取: 使用 new XSSFWorkbook(InputStream) 從已存在的文件流加載一個現有的工作簿。

3. XSSFSheet:
用途: 代表工作簿中的一個工作表(Sheet)。

寫入: 使用 workbook.createSheet(“name”) 創建一個新的工作表。
讀取: 使用 workbook.getSheetAt(index) 或 workbook.getSheet(“name”) 獲取一個已存在的工作表。

4. XSSFRow:
用途: 代表工作表中的一行。
寫入: 使用 sheet.createRow(rowIndex) 在指定行號(從0開始)創建一個新行。
讀取: 使用 sheet.getRow(rowIndex) 獲取指定行號的行對象。

5. XSSFCell:
用途: 代表行中的一個單元格。

寫入: 使用 row.createCell(cellIndex) 在指定列號(從0開始)創建一個新單元格。
讀取: 使用 row.getCell(cellIndex) 獲取指定列號的單元格對象。

最后我們來看看項目中(導出Excel表) 代碼開發

首先還是來看看前端,來看功能:
在這里插入圖片描述
在統計界面的右上角有一個小按鈕(數據導出),點擊后,我們的前端便可把要統計的數據傳給我們的后端,后端再返回一個Excel數據表

🙌在寫代碼前,先做一個準備工作:

先設計一個運營數據報表模板:

在這里插入圖片描述
再在resources下面創建一個template包,然后把運營數據報表模板.xlsx復制進去。

在這里插入圖片描述

admin下的ReportController類:

 /*** 導出Excel* @param response*/@GetMapping("/export")@ApiOperation("導出Excel")public void export(HttpServletResponse response) {reportService.exportBusinessData(response);}

ReportService類:

    /*** 導出營業數據* @param response*/void exportBusinessData(HttpServletResponse response);
}

ReportServiceImpl類:

@Overridepublic void exportBusinessData(HttpServletResponse response) {//1.查詢數據庫,獲取數據 查詢最近30天的營業數據LocalDate dateBegin = LocalDate.now().minusDays(30);LocalDate dateEnd = LocalDate.now().minusDays(1);//查詢概覽 數據BusinessDataVO businessDataVO = workspaceService.getBusinessData(LocalDateTime.of(dateBegin, LocalTime.MIN),LocalDateTime.of(dateEnd, LocalTime.MAX));//2.通過POI將數據輸出到Excel文件中InputStream in =this.getClass().getClassLoader().getResourceAsStream("template/運營數據報表模板.xlsx");try {//基于模板文件創建一個Excel表格對象XSSFWorkbook excel = new XSSFWorkbook(in);//填充數據-表格文件的sheet標簽頁XSSFSheet sheet =excel.getSheet("Sheet1");//填充數據-“時間”列sheet.getRow(1).getCell(1).setCellValue("時間:"+dateBegin+"至"+dateEnd);//填充數據-“營業額”列XSSFRow row =sheet.getRow(3);row.getCell(2).setCellValue(businessDataVO.getTurnover());row.getCell(4).setCellValue(businessDataVO.getOrderCompletionRate());row.getCell(6).setCellValue(businessDataVO.getNewUsers());//填充數據-“有效訂單數”列row = sheet.getRow(4);row.getCell(2).setCellValue(businessDataVO.getValidOrderCount());row.getCell(4).setCellValue(businessDataVO.getUnitPrice());//填充明細數據for(int i = 0; i < 30; i++){LocalDate date = dateBegin.plusDays(i);//查詢某一天的營業數據BusinessDataVO businessData =workspaceService.getBusinessData(LocalDateTime.of(date, LocalTime.MIN),LocalDateTime.of(date, LocalTime.MAX));//獲得某一行row = sheet.getRow(7+i);row.getCell(1).setCellValue(date.toString());row.getCell(2).setCellValue(businessData.getTurnover());row.getCell(3).setCellValue(businessData.getValidOrderCount());row.getCell(4).setCellValue(businessData.getOrderCompletionRate());row.getCell(5).setCellValue(businessData.getUnitPrice());row.getCell(6).setCellValue(businessData.getNewUsers());}//3.使用輸出流將Excel文件下載到客戶端ServletOutputStream out = response.getOutputStream();excel.write(out);//釋放資源out.close();excel.close();} catch (IOException e) {e.printStackTrace();}}

小白啊!!!寫的不好輕噴啊🤯如果覺得寫的不好,點個贊吧🤪(批評是我寫作的動力)

…。。。。。。。。。。。…請添加圖片描述

…。。。。。。。。。。。…

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93150.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenJDK 17 源碼 安全點輪詢的信號處理流程

OpenJDK 17 源碼&#xff0c;安全點輪詢的信號處理流程如下&#xff08;重點分析安全點輪詢相關部分&#xff09;&#xff1a;核心信號處理流程信號觸發&#xff1a;當線程訪問安全點輪詢內存頁時&#xff08;SafepointMechanism::is_poll_address&#xff09;&#xff0c;會觸…

InfluxDB 在工業控制系統中的數據監控案例(一)

工業控制系統數據監控的重要性**在工業領域&#xff0c;生產過程的復雜性和連續性使得數據監控成為保障生產穩定運行的關鍵環節。通過實時收集、處理和分析生產數據&#xff0c;企業能夠及時掌握設備運行狀態、產品質量信息以及生產流程的各項參數&#xff0c;從而為生產決策提…

嵌入式學習(day26)frambuffer幀緩沖

一、UI技術: User interface&#xff08;1&#xff09;framebuffer: 幀緩沖、幀緩存技術 Linux內核專門為圖形化顯示提供的一套應用程序接口。流程如下&#xff1a;1. 打開顯示設備 (/dev/fb0) 2. 獲取顯示設備相關參數&#xff08;分辨率&#xff0c;像素格式&#xff09;---》…

408每日一題筆記 41-50

答案&#xff1a;A 解析&#xff1a;CSMA/CD 協議里&#xff0c;“爭用期” 就是信號在總線上最遠兩個端點之間往返傳輸的時間&#xff0c;也叫沖突窗口&#xff0c;選 A。

【物聯網】基于樹莓派的物聯網開發【26】——樹莓派開啟串口并配置串口助手Minicom

串口配置 &#xff08;1&#xff09;打開串口&#xff0c;終端輸入命令&#xff1a; sudo raspi-config &#xff08;2&#xff09;串口設置選擇Interfacing Options→Serial port→No→Yes→ok&#xff08;3&#xff09;設置開啟&#xff0c;打開串口 &#xff08;4&#xff0…

考研/考公知識共享平臺的設計與實現-項目分享

考研/考公知識共享平臺的設計與實現-項目分享項目介紹項目摘要學生前臺用例圖管理員用例圖系統流程圖系統功能結構圖實體圖學生信息實體圖資料信息管理實體圖報考指南管理寫在最后項目介紹 使用者&#xff1a;管理員、學生前臺、學生后臺 開發技術&#xff1a;MySQLJavaSpring…

一鍵設置 NTP 時區的腳本(親測,適用于部署 K8S 的前置環境)

文章目錄一、時區和時間同步的配置命令二、完整腳本ntp_timezone_setup.sh三、使用方法3.1、創建腳本3.2、賦予執行權限3.3、運行腳本3.4、驗證一、時區和時間同步的配置命令 整理用于做時區和時間同步的配置幾條命令分別如下&#xff1a; 1?? 編輯 chrony 配置 vim /etc/…

BPMN編輯器技術實現總結AI時代的工作流編輯器

項目概述 基于 diagram.js 的 BPMN 流程設計器&#xff0c;通過依賴注入(DI)實現模塊化擴展&#xff0c;自定義模塊擴展與SVG圖形渲染。后端工作流引擎自定義統一任務調度函數&#xff0c;實現異構模型統一調用。 核心技術架構 1. diagram.js 架構基礎 核心模塊組成 Canv…

兩階段最小二乘法(2SLS)與 工具變量(IV)模型

以下是關于兩階段最小二乘法&#xff08;2SLS&#xff09;與工具變量&#xff08;IV&#xff09;模型關系的系統解析&#xff0c;結合計量經濟學理論與論文上下文進行說明&#xff1a;一、核心關系&#xff1a;2SLS是IV模型的實現方法 1. IV模型&#xff1a;解決內生性的理論框…

熬夜面膜賽道跑出的新物種

在快節奏的現代生活中&#xff0c;熬夜已成為都市人群的常態&#xff0c;深夜11點后的朋友圈總是一片“失眠”哀嚎。隨之而來的是“熬夜肌”問題的激增——暗沉、干燥、屏障受損等訴求催生了龐大的熬夜面膜市場。2025年&#xff0c;中國面膜線上規模已達484億元&#xff0c;其中…

20250813測試開發崗(涼)面

1. 自我介紹2. 你如何理解測開&#xff0c;你認為測開的工作有哪些3. 測試的時候包括哪些部分4. 就功能層面&#xff0c;你認為需要從那些部分考慮&#xff0c;形成一個完整并可執行的trace&#xff08;是這個詞吧&#xff09;5. 你了解數據庫嗎&#xff08;我說只會比較基礎的…

面向Python/C#開發者入門Java與Bukkit API

本教程將以"手持發射器箭矢機槍"功能為例&#xff0c;帶你掌握Java語言基礎和Bukkit API的核心概念&#xff0c;最終實現自主開發插件。 我們將通過剖析一個實際Java代碼文件&#xff0c;逐步解析其運作機制&#xff0c;幫助你順利將現有編程知識遷移到Java和Bukkit…

從100到0.3美元:GPT-5用價格戰血洗大模型賽道

————————— 一、從 100 美元到 0.3 美元&#xff1a;史無前例的效率革命 ————————— 互聯網女王 Mary Meeker 在《AI 趨勢報告 2025》里寫下這組數字&#xff1a; ? 訓練成本 8 年飆升 2400 倍&#xff1b; ? 推理成本 2 年暴跌 99.7%。OpenAI 把“暴跌”推到…

第三十二天(文件操作安全)

文件遍歷上傳下載刪除編輯包含等 $_FILES&#xff1a;PHP中一個預定義的超全局變量&#xff0c;用于在上傳文件時從客戶端接收文件&#xff0c;并將其保存到服務器上。它是一個包含上傳文件信息的數組&#xff0c;包括文件名、類型、大小、臨時文件名等信息。 $_FILES"表…

系統集成項目管理工程師【第十一章 規劃過程組】規劃風險應對、規劃采購管理篇

系統集成項目管理工程師【第十一章 規劃過程組】規劃風險應對、規劃采購管理篇 一、規劃風險應對&#xff1a;為項目穿上"防護衣" 1. 什么是規劃風險應對&#xff1f; 規劃風險應對是基于風險量化分析結果&#xff0c;制定可選方案、選擇應對策略并商定具體行動的過程…

20250813比賽總結

題目T1.volumeT2.storyT3.treeT4.game預計分數6060030實際分數306000T1.volume 確實是暴力&#xff0c;但我是用數組統計每個可能出現的數&#xff0c;于是3AC 3WA 4TLE。拿到全部分應該直接按照題目模擬。 T2.story 暴力dfs&#xff0c;由于忘記優化所以60pts&#xff0c;而且…

適合物流/應急/工業的對講機,AORO M6 Pro構建高效指揮調度方案

在物流調度、應急救援與工業協同等對通信可靠性要求極高的領域中&#xff0c;專業對講設備的技術迭代直接關系到任務執行效率與安全保障。AORO M6 Pro對講機作為新一代融合通信終端&#xff0c;正以多模融合技術與國產化自主創新&#xff0c;為復雜場景下的高效調度提供堅實的技…

類和對象----中

這里寫目錄標題<font color"#FF00FF">1. 類和對象(中)<font color"#FF00FF">2. 構造函數<font color"#FF00FF">3. 析構函數<font color"#FF00FF">4. 拷?構造函數1. 類和對象(中) 類的默認成員函數&#xff1…

CAD 的 C# 開發中,對多段線(封閉多邊形)內部的點進行 “一筆連線且不交叉、不出界

本質上是約束條件下的路徑規劃問題&#xff0c;核心是找到一條連續路徑遍歷所有點&#xff0c;同時滿足&#xff1a; 路徑不與自身交叉&#xff1b; 路徑全程在多段線&#xff08;多邊形&#xff09;內部&#xff1b; 路徑連續&#xff08;一筆畫&#xff09;。核心思路與算法步…

ZED 2i相機調試

1. 測試 ZED SDK /usr/local/zed/tools/ZED_Diagnostic/usr/local/zed/tools/ZED_Explorer2. 安裝SDK How to Install ZED SDK on Linux - Stereolabs 安裝命令&#xff1a; sudo apt install zstd./ZED_SDK_Ubuntu20_cuda12.1_tensorrt8.6_v5.0.5.zstd.run