EasyExcel(讀取操作和填充操作)

文章目錄

    • 1.準備Read.xlsx(具有兩個sheet)
    • 2.讀取第一個sheet中的數據
        • 1.模板
        • 2.方法
        • 3.結果
    • 3.讀取所有sheet中的數據
        • 1.模板
        • 2.方法
        • 3.結果
  • EasyExcel填充
    • 1.簡單填充
        • 1.準備 Fill01.xlsx
        • 2.無模版
        • 3.方法
        • 4.結果
    • 2.列表填充
        • 1.準備 Fill02.xlsx
        • 2.模板
        • 3.方法
        • 4.結果
    • 3.組合填充
        • 1.準備 Fill03.xlsx
        • 2.模板
        • 3.方法
        • 4.結果
    • 4.水平填充
        • 1.準備 Fill04.xlsx
        • 2.模板
        • 3.方法
        • 4.結果

1.準備Read.xlsx(具有兩個sheet)

CleanShot 2024-10-30 at 16.18.36@2x

2.讀取第一個sheet中的數據

1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class DemoData {// 根據Excel中指定列名或列的索引讀取@ExcelProperty(value = "字符串標題")private String name;@ExcelProperty(value = "日期標題")private Date hireDate;@ExcelProperty(value = "數字標題")private Double salary;
}
2.方法
/*** 讀取第一個sheet中的數據*/
@Test
public void testRead01() {// 讀取文件路徑String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Read.xlsx";// 存儲解析的數據List<DemoData> demoDataArrayList = new ArrayList<>();// 1.創建readExcelReader excelReader = EasyExcel.read(fileName).build();// 2.創建sheetReadSheet sheetOne = EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new AnalysisEventListener<DemoData>() {@Overridepublic void invoke(DemoData demoData, AnalysisContext analysisContext) {demoDataArrayList.add(demoData);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("解析完成一個sheet...");}}).build();// 參數為可變參數,可以讀取多個sheetexcelReader.read(sheetOne);// 必須關閉流,否則會出現內存泄漏excelReader.finish();// 輸出所有解析的數據System.out.println("所有解析的數據為:");demoDataArrayList.forEach(System.out::println);
}
3.結果

CleanShot 2024-10-30 at 16.28.03@2x

3.讀取所有sheet中的數據

1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class DemoData {// 根據Excel中指定列名或列的索引讀取@ExcelProperty(value = "字符串標題")private String name;@ExcelProperty(value = "日期標題")private Date hireDate;@ExcelProperty(value = "數字標題")private Double salary;
}
2.方法
/*** 讀取所有sheet中的數據*/
@Test
public void testRead02() {// 讀取文件路徑String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Read.xlsx";// 存儲解析的數據List<DemoData> demoDataArrayList = new ArrayList<>();// 直接使用EasyExcel讀取excelExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new AnalysisEventListener<DemoData>() {// 每解析一行數據,該方法會被調用一次@Overridepublic void invoke(DemoData demoData, AnalysisContext analysisContext) {demoDataArrayList.add(demoData);}// 解析完成一個sheet后被調用@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("解析完成一個sheet...");// 可以將解析的數據保存到數據庫}}).build();excelReader.readAll(); // 讀所有sheet// 必須關閉流,否則會出現內存泄漏excelReader.finish();// 輸出所有解析的數據System.out.println("所有解析的數據為:");demoDataArrayList.forEach(System.out::println);
}
3.結果

CleanShot 2024-10-30 at 16.27.38@2x

EasyExcel填充

1.簡單填充

1.準備 Fill01.xlsx

CleanShot 2024-10-30 at 16.32.41@2x

2.無模版
3.方法
/*** 簡單填充*/
@Test
public void testFill01() {// 選擇要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill01.xlsx";// 選擇填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill01_end.xlsx";// 1.創建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.創建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.構建數據Map<String, Object> data = new HashMap<>();data.put("name", "張三");data.put("age", 20);data.put("birthday", new Date());// 4.填充數據excelWriter.fill(data, writeSheet);// 5.關閉流excelWriter.finish();
}
4.結果

CleanShot 2024-10-30 at 16.46.44@2x

2.列表填充

1.準備 Fill02.xlsx

2.模板
    @Data@Builder@NoArgsConstructor@AllArgsConstructorpublic static class Fill02 {private String name;private Double number;}
3.方法
    /*** 列表填充*/@Testpublic void testFill02() {// 選擇要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill02.xlsx";// 選擇填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill02_end.xlsx";// 1.創建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.創建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.構建數據List<Fill02> data = new ArrayList<>();data.add(Fill02.builder().name("張三").number(100.0).build());data.add(Fill02.builder().name("李四").number(200.0).build());data.add(Fill02.builder().name("王五").number(300.0).build());// 4.填充數據excelWriter.fill(data, writeSheet);// 5.關閉流excelWriter.finish();}
4.結果

CleanShot 2024-10-30 at 17.01.37@2x

3.組合填充

1.準備 Fill03.xlsx

CleanShot 2024-10-30 at 17.26.36@2x

2.模板
    @Data@Builder@NoArgsConstructor@AllArgsConstructorpublic static class Fill03 {private String name;private Integer age;}
3.方法
/*** 組合填充*/
@Test
public void testFill03() {// 選擇要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill03.xlsx";// 選擇填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill03_end.xlsx";// 1.創建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.創建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.構建數據// 3.1 構建數據1Map<String, Object> data1 = new HashMap<>();data1.put("time", new Date());data1.put("num", 2);// 3.2 構建數據2List<Fill03> data2 = new ArrayList<>();data2.add(Fill03.builder().name("張三").age(20).build());data2.add(Fill03.builder().name("李四").age(21).build());// 填充配置,換行填充(混合填充必備配置)FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();// 4.填充數據excelWriter.fill(data1, fillConfig, writeSheet);excelWriter.fill(data2, fillConfig, writeSheet);// 5.關閉流excelWriter.finish();
}
4.結果

CleanShot 2024-10-30 at 17.33.55@2x

4.水平填充

1.準備 Fill04.xlsx

2.模板
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Fill04 {private String name;private Integer age;
}
3.方法
    /*** 水平填充*/@Testpublic void testFill04() {// 選擇要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill04.xlsx";// 選擇填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill04_end.xlsx";// 1.創建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.創建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.構建數據List<Fill04> data = new ArrayList<>();data.add(Fill04.builder().name("張三").age(20).build());data.add(Fill04.builder().name("李四").age(21).build());// 填充配置,水平填充FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();// 4.填充數據excelWriter.fill(data, fillConfig, writeSheet);// 5.關閉流excelWriter.finish();}
4.結果

CleanShot 2024-10-30 at 17.34.12@2x

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

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

相關文章

CKA認證 | Day7 K8s存儲

第七章 Kubernetes存儲 1、數據卷與數據持久卷 為什么需要數據卷&#xff1f; 容器中的文件在磁盤上是臨時存放的&#xff0c;這給容器中運行比較重要的應用程序帶來一些問題。 問題1&#xff1a;當容器升級或者崩潰時&#xff0c;kubelet會重建容器&#xff0c;容器內文件會…

Python調用R語言中的程序包來執行回歸樹、隨機森林、條件推斷樹和條件推斷森林算法

要使用Python調用R語言中的程序包來執行回歸樹、隨機森林、條件推斷樹和條件推斷森林算法&#xff0c;重新計算中國居民收入不平等&#xff0c;并進行分類匯總&#xff0c;我們可以使用rpy2庫。rpy2允許在Python中嵌入R代碼并調用R函數。以下是一個詳細的步驟和示例代碼&#x…

關于JAVA方法值傳遞問題

1.1 前言 之前在學習C語言的時候&#xff0c;將實參傳遞給方法&#xff08;或函數&#xff09;的方式分為兩種&#xff1a;值傳遞和引用傳遞&#xff0c;但在JAVA中只有值傳遞&#xff08;顛覆認知&#xff0c;基礎沒學踏實&#xff09; 參考文章&#xff1a;https://blog.csd…

Excel基礎知識

一&#xff1a;數組 一行或者一列數據稱為一維數組&#xff0c;多行多列稱為二維數組&#xff0c;數組支持算術運算&#xff08;如加減乘除等&#xff09;。 行&#xff1a;{1,2,3,4} 數組中的每個值用逗號分隔列&#xff1a;{1;2;3;4} 數組中的每個值用分號分隔行列&#xf…

基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能顯示器連接端口方案

隨著USB-C連接器和PD功能的出現&#xff0c;新一代USB-C PD PC顯示器可以用作個人和專業PC工作環境的電源和數據集線器。 雖然USB-C PD顯示器是唯一插入墻壁插座的交流電源輸入設備&#xff0c;但它可以作為數據UFP&#xff08;上游接口&#xff09;連接到連接到TCD&#xff0…

gazebo_world 基本圍墻。

如何使用&#xff1f; 參考gazebo harmonic的官方教程。 本人使用harmonic的template&#xff0c;在里面進行修改就可以分流暢地使用下去。 以下是world 文件. <?xml version"1.0" ?> <!--Try sending commands:gz topic -t "/model/diff_drive/…

解決無法在 Ubuntu 24.04 上運行 AppImage 應用

在 Ubuntu 24.04 中運行 AppImage 應用的完整指南 在 Ubuntu 24.04 中&#xff0c;許多用戶可能會遇到 AppImage 應用無法啟動的問題。即使你已經設置了正確的文件權限&#xff0c;AppImage 仍然拒絕運行。這通常是由于缺少必要的庫文件所致。 問題根源&#xff1a;缺少 FUSE…

Pytorch使用手冊-DCGAN 指南(專題十四)

1. Introduction 本教程將通過一個示例介紹 DCGANs(深度卷積生成對抗網絡)。我們將訓練一個生成對抗網絡(GAN),在給它展示大量真實名人照片后,它能夠生成新的“名人”圖片。這里的大部分代碼來源于 PyTorch 官方示例中的 DCGAN 實現,而本文檔將對該實現進行詳細解釋,并…

springboot配置oracle+達夢數據庫多數據源配置并動態切換

項目場景&#xff1a; 在工作中很多情況需要跨數據庫進行數據操作,自己總結的經驗希望對各位有所幫助 問題描述 總結了幾個問題 1.識別不到mapper 2.識別不到xml 3.找不到數據源 原因分析&#xff1a; 1.配置文件編寫導致識別mapper 2.配置類編寫建的格式有問題 3.命名…

html+css+js網頁設計 美食 家美食1個頁面

htmlcssjs網頁設計 美食 家美食1個頁面 網頁作品代碼簡單&#xff0c;可使用任意HTML輯軟件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html編輯軟件進行運行及修改編輯等操作&#xff09;。 獲取源碼 1&#xf…

【機器學習】【樸素貝葉斯分類器】從理論到實踐:樸素貝葉斯分類器在垃圾短信過濾中的應用

&#x1f31f; 關于我 &#x1f31f; 大家好呀&#xff01;&#x1f44b; 我是一名大三在讀學生&#xff0c;目前對人工智能領域充滿了濃厚的興趣&#xff0c;尤其是機器學習、深度學習和自然語言處理這些酷炫的技術&#xff01;&#x1f916;&#x1f4bb; 平時我喜歡動手做實…

Vue使用Tinymce 編輯器

目錄 一、下載并重新組織tinymce結構二、使用三、遇到的坑 一、下載并重新組織tinymce結構 下載 npm install tinymce^7 or yarn add tinymce^7重構目錄 在node_moudles里找到tinymce文件夾&#xff0c;把里面文件拷貝一份放到public下&#xff0c;如下&#xff1a; -- pub…

odoo中@api.model, @api.depends和@api.onchange 裝飾器的區別

文章目錄 1. api.model用途特點示例 2. api.depends用途特點示例 3. api.onchange用途特點示例 總結 在 Odoo 中&#xff0c;裝飾器&#xff08;decorators&#xff09;用于修飾方法&#xff0c;以指定它們的行為和觸發條件。api.model、api.depends 和 api.onchange 是三個常用…

EMNLP'24 最佳論文解讀 | 大語言模型的預訓練數據檢測:基于散度的校準方法

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; 點擊 閱讀原文 觀看作者講解回放&#xff01; 作者簡介 張偉超&#xff0c;中國科學院計算所網絡數據科學與技術重點實驗室三年級直博生 內容簡介 近年來&#xff0c;大語言模型&#xff08;LLMs&#xff09;的…

大數據技術-Hadoop(一)Hadoop集群的安裝與配置

目錄 一、準備工作 1、安裝jdk&#xff08;每個節點都執行&#xff09; 2、修改主機配置 &#xff08;每個節點都執行&#xff09; 3、配置ssh無密登錄 &#xff08;每個節點都執行&#xff09; 二、安裝Hadoop&#xff08;每個節點都執行&#xff09; 三、集群啟動配置&a…

PilotGo

title: 解鎖 PilotGo&#xff1a;智能化運維的得力助手 date: ‘2024-12-29’ category: blog tags: PilotGo運維管理智能化工具技術應用 sig: ops archives: ‘2024-12’ author:way_back summary: PilotGo 作為一款創新的運維管理工具&#xff0c;憑借其智能化的特性和豐富的…

折騰日記:如何讓吃灰筆記本發揮余熱——搭建一個相冊服務

背景 之前寫過&#xff0c;我在家里用了一臺舊的工作站筆記本做了服務器&#xff0c;連上一個綠聯的5位硬盤盒實現簡單的網盤功能&#xff0c;然而&#xff0c;還是覺的不太理想&#xff0c;比如使用filebrowser雖然可以備份文件和圖片&#xff0c;當使用手機使用網頁&#xf…

使用seata實現分布式事務管理

配置 版本說明&#xff1a;springCloud Alibaba組件版本關系 我用的是spring cloud Alibaba 2.2.1.RELEASE 、springboot 2.2.1.RELEASE、nacos 2.0.1、seata1.2.0,jdk1.8 seata 主要用于在分布式系統中對數據庫進行事務回滾&#xff0c;保證全局事務的一致性。 seata的使用…

【總結】動態規劃

線性dp LeetCode題單&#xff0c; 從記憶化搜索到遞推 Pre&#xff1a; 從最初狀態到最終狀態等價&#xff0c;那么從最終狀態開始和最初狀態開始結果一樣。 遞歸時不會產生其他負面結果&#xff0c;即無論何時進入遞歸&#xff0c;只要遞歸參數相同&#xff0c;結果就相同。 …

RabbitMQ中的異步Confirm模式:提升消息可靠性的利器

在現代分布式系統中&#xff0c;消息隊列&#xff08;Message Queue&#xff09;扮演著至關重要的角色&#xff0c;它能夠解耦系統組件、提高系統的可擴展性和可靠性。RabbitMQ作為一款廣泛使用的消息隊列中間件&#xff0c;提供了多種機制來確保消息的可靠傳遞。其中&#xff…