使用Java進行excel操作的幾種方法 (下)

2022-01-06 傳智教育博學谷

easyexcel是阿里巴巴開源的一款excel解析工具,底層邏輯也是基於apache poi進行二次開發的。不同的是,再讀寫數據的時候,採用sax模式一行一行解析,在並發量很大的情況下,依然能穩定運行!

下面就一起來了解一下這款新起之秀!

3.1 添加依賴包

<!-- EasyExcel --><dependency>     <groupId>com.alibaba</groupId>     <artifactId>easyexcel</artifactId>     <version>2.2.6</version> </dependency> <!--常用工具庫--> <dependency>     <groupId>com.google.guava</groupId>     <artifactId>guava</artifactId>     <version>29.0-jre</version> </dependency>

3.2 採用註解導出導入

easyexcel同樣也支持採用註解方式進行導出、導入!

首先,我們創建一個實體類UserEntity,其中@ExcelProperty註解表示導出文件的頭部信息。

3.2.1 導出操作

package cn.tedu.excel.easyexcel;
import com.alibaba.excel.EasyExcel;import com.alibaba.excel.annotation.ExcelProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.format.annotation.DateTimeFormat;
import java.util.ArrayList;import java.util.Date;import java.util.List;
@Data@NoArgsConstructor@AllArgsConstructorpublic class UserEntity { @ExcelProperty(value = "姓名") private String name;
@ExcelProperty(value = "年齡") private int age;
@DateTimeFormat(fallbackPatterns = "yyyy-MM-dd HH:mm:ss") @ExcelProperty(value = "操作時間") private Date time;
public static void main(String[] args) { List<UserEntity> dataList = new ArrayList<>(); for (int i = 0; i < 10; i++) { UserEntity userEntity = new UserEntity(); userEntity.setName("張三" + i); userEntity.setAge(20 + i); userEntity.setTime(new Date(System.currentTimeMillis() + i)); dataList.add(userEntity); } EasyExcel.write("/Users/lixin/Desktop/easyexcel-user1.xls", UserEntity.class).sheet("用戶信息").doWrite(dataList); }}

package cn.tedu.excel.easyexcel;
import com.alibaba.excel.EasyExcel;import org.json.simple.JSONArray;
import java.util.List;
public class DemoData {    public static void main(String[] args) {        String filePath = "/Users/lixin/Desktop/easyexcel-user1.xls";        List<DemoData> list = EasyExcel.read(filePath).head(UserEntity.class).sheet().doReadSync();        System.out.println(JSONArray.toJSONString(list));    }}

[UserEntity(name=張三0, age=20, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三1, age=21, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三2, age=22, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三3, age=23, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三4, age=24, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三5, age=25, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三6, age=26, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三7, age=27, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三8, age=28, time=Mon Mar 29 16:42:20 CST 2021),UserEntity(name=張三9, age=29, time=Mon Mar 29 16:42:20 CST 2021)]

3.3 自定義數據結構導出導入

easyexcel同樣也支持自定義數據結構導出、導入excel。

3.3.1 導出操作

public static void main(String[] args) {    //表頭    List<List<String>> headList = new ArrayList<>();    headList.add(Lists.newArrayList("姓名"));    headList.add(Lists.newArrayList("年齡"));    headList.add(Lists.newArrayList("操作時間"));
   //數據體    List<List<Object>> dataList = new ArrayList<>();    for (int i = 0; i < 10; i++) {        List<Object> data = new ArrayList<>();        data.add("張三" + i);        data.add(20 + i);        data.add(new Date(System.currentTimeMillis() + i));        dataList.add(data);    }    EasyExcel.write("/Users/hello/Documents/easyexcel-user2.xls").head(headList).sheet("用戶信息").doWrite(dataList);}

public static void main(String[] args) {    String filePath = "/Users/panzhi/Documents/easyexcel-user2.xls";    UserDataListener userDataListener = new UserDataListener();    EasyExcel.read(filePath, userDataListener).sheet().doRead();    System.out.println("表頭:" + JSONArray.toJSONString(userDataListener.getHeadList()));    System.out.println("數據體:" + JSONArray.toJSONString(userDataListener.getDataList()));}

表頭:[{0:"姓名",1:"年齡",2:"操作時間"}]數據體:[{0:"張三0",1:"20",2:"2021-03-29 16:31:39"},{0:"張三1",1:"21",2:"2021-03-29 16:31:39"},{0:"張三2",1:"22",2:"2021-03-29 16:31:39"},{0:"張三3",1:"23",2:"2021-03-29 16:31:39"},{0:"張三4",1:"24",2:"2021-03-29 16:31:39"},{0:"張三5",1:"25",2:"2021-03-29 16:31:39"},{0:"張三6",1:"26",2:"2021-03-29 16:31:39"},{0:"張三7",1:"27",2:"2021-03-29 16:31:39"},{0:"張三8",1:"28",2:"2021-03-29 16:31:39"},{0:"張三9",1:"29",2:"2021-03-29 16:31:39"}]

相關焦點

  • 使用Java進行excel操作的幾種方法(上)
    很久以前,微軟的電子表格軟體Excel操作簡單、存儲數據直觀方便,還支持列印報表,極大的提升了工作的效率,深得白領青睞,不久之後,便成了辦公室裡的必備工具。隨著更多的新語言的崛起,例如我們所熟悉的Java,後來便有一些團隊開始開發一套能與Excel軟體無縫切換的操作工具!
  • excel中使用函數進行成績排名的方法
    我們在使用excel處理數據時,可以使用函數來對學生的成績排名進行操作,下面就一起來看看excel中使用函數進行成績排名的方法。方法/步驟在桌面上雙擊excel的快捷圖標,將excel軟體打開。打開excel之後,按下Ctrl+O鍵,在彈出的對話框內選擇表格文件,把選擇的表格文件打開,然後選擇排名下面的單元格,在該單元格內輸入排名函數。
  • Java如何操作Word, Excel, PDF文檔?
    參考:  http://danadler.com/jacob/  http://jakarta.apache.org/poi/  http://www.onjava.com/pub/a/onjava/2003/01/22/poi.html  http://www.csdn.net/develop/article/15/15311
  • 沒想到啊,Java操作Excel竟然這麼簡單!
    前言在工作中,使用excel表格處理數據是很常見的操作,本文就來講解下如何使用開源輪子實現下載、導入、導出的功能。在之前,很多Java程式設計師都喜歡使用POI的類庫來操作excel,但是非常的不方便,不僅代碼寫的很臃腫,還要處理各種office版本兼容問題,最怕的就是使用不當很容易造成內存溢出,因此今天給大家推薦阿里的一款開源項目 easyexcel。
  • 在excel中製作斜線表頭的幾種方法
    我們平常用word製作斜線表頭非常方便,但是很多人喜歡在excel中製作斜線表頭,遺憾的是excel被沒有直接給我們提供方便製作斜線表頭的方法
  • excel減法函數的使用方法
    excel是一個神奇的表格,它本身鑲嵌了運算功能,不需要計算器,就可以進行各種運算。
  • 每日一課 | Apache POI –用Java讀寫Excel文件
    Apache POI庫的基本定義本節簡要介紹有關Excel讀寫期間使用的基本類。HSSF在類名之前添加前綴,以指示與Microsoft Excel 2003文件相關的操作。XSSF在類名之前添加前綴,以指示與Microsoft Excel 2007文件或更高版本相關的操作。
  • java安全編碼指南之:Number操作
    Number的範圍每種Number類型都有它的範圍,我們看下java中Number類型的範圍:考慮到我們最常用的int操作,雖然int的範圍夠大,但是如果我們在做一些int操作的時候還是可能超出int的範圍。超出了int範圍會發送什麼事情呢?看下面的例子:運行結果:-2147482649。
  • 辦公軟體操作技巧80:如何在excel中進行換行操作
    在日常工作中,我們使用excel編輯電子表格時,經常需要對單元格中的內容進行換行,如下圖中的名稱列,那麼今天就來和大家分享如何在excel中進行換行操作。當列寬較窄時,系統將會自動進行換行調整。自動換行效果方法二:手動換行雙擊需要換行的單元格——>將光標定位到要換行的內容後面——>按下快捷鍵組合「Alt + 回車」,即可進行手動強制換行
  • excel關於函數countifs的操作方法
    關於函數count和countif的操作技巧」中,我們已經介紹了函數countif的基本用法進行了介紹,今天我們要介紹的函數countifs與函數countif密切相關,所以為了更好的理解函數countifs的操作方法,我們將在回顧函數countif的基礎上介紹函數countifs的操作方法。
  • Python「文件操作」Excel篇(上)
    與word文件的操作庫python-docx類似,Python也有專門的庫為Excel文件的操作提供支持,這些庫包括xlrd、xlwt、xlutils、openpyxl、xlsxwriter幾種,其中我最喜歡用的是openpyxl,這也是本次講解的主要內容。Excel文件大家也不陌生了,平時辦公、學習中都會用到,大家回憶一下,你操作一個Excel文件是什麼步驟呢?
  • jacob操作office word簡單教程
    word文件比較多,word文件的加密解密,轉換為各種格式,插入圖片,添加水印、html轉word等等各種東西,大家也都知道,java語言是不能直接操作word或者excel的,不像C#,可以調用VBA的類來直接操作office。
  • 程式設計師:java導出Excel,附帶依賴、後端代碼和前端JS
    org.springframework.core.io.ClassPathResource;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import java.io
  • 如何使用 Java 靈活讀取 Excel 內容 ?
    Excel 讀操作,很容易造成內存溢出問題。本博文源碼在公眾號:Java後端,後臺回復 excel 獲取。,EasyExcel 通過 @DateTimeFormat 註解進行格式化到這裡都是以測試的方式來編寫程序代碼,作為 Java Web 開發人員,尤其在目前主流 Spring Boot 的架構下,所以如何實現 Web 方式讀取 Excel 的信息呢?
  • java——Scnner()類下面有幾種方法呢?
    extends Object implements Iterator Scanner 使用分隔符模式將其輸入分解為標記,默認情況下該分隔符模式與空白匹配。然後可以使用不同的 next 方法將得到的標記轉換為不同類型的值。
  • Java 8 中的流操作-基本使用&性能測試
    這有點兒像是我們操作資料庫一樣,例如我想要查詢出熱量較低的菜品名字我就可以像下面這樣:SELECT name FROM dishes WHERE calorie < 400;您看,我們並沒有對菜品的什麼屬性進行篩選(比如像之前使用迭代器一樣每個做判斷),我們只是表達了我們想要什麼。那麼為什麼到了 Java 的集合中,這樣做就不行了呢?
  • Excel教師操作大全:用Excel篩選內容後,對該內容進行統計的技巧
    日常辦公中,相信老師們對excel表格的使用隨處可見,但是對於很多老師來說,線上辦公技能還是比較生疏的,特別是對於剛剛接觸線上辦公的老師們來說,如何操作常規的辦公軟體,也是較為重要的一項工作;今天就和老師們來聊聊線上辦公中用到最多的工具——excel制表之用excel篩選內容後,對該內容進行統計的操作方法
  • word轉excel有什麼好用的方法?具體word轉excel操作分享
    word轉excel有什麼好用的方法?當我們在word中匯總了一些數據時,想要將其內容轉換到excel表格中,一般大家都是怎麼操作呢?如果大家不會對這兩種文件進行轉換的話,可以嘗試一下小編以下的方法,這樣我們就可以很快的完成word到excel表格的轉換了。
  • 像Excel一樣使用python進行數據分析
    在開始使用python進行數據導入前需要先導入pandas庫,為了方便起見,我們也同時導入numpy庫。import numpy as npimport pandas as pd導入數據表下面分別是從excel和csv格式文件導入數據並創建數據表的方法。
  • POI和 EasyExcel對Excel的簡單操作
    XSSFWorkbook,更快速的去對07版本的excel文件進行處理下面我們將會對XSSFworkbook和SXSSFworkbook類對excel文件的操作進行時間上的對比。缺點:關於03版的excel,因為其最多只有65536行,當我們導入的數據超過65536行時,它就會拋出異常優點:再數據操作過程中,其將數據寫入緩存,不操作磁碟,最後再一次性寫入磁碟,操作速度快數據批量導入,導入65536行數據到03版的excel文件中