Java使用EasyExcel實現(xiàn)對excel文件的讀寫方式
提示:這里可以添加本文要記錄的大概內(nèi)容:
在學(xué)習(xí)Java中難免會有對文件的讀寫操作,像word文檔、pdf文件以及excel表。這些讀寫操作都大差不差,接下來為大家講解一下Java對excel表的讀寫操作。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、EasyExcel是什么?
EasyExcel是阿里巴巴開源的一款基于Java語言的簡單、高效、功能強大的Excel讀寫工具庫。
它提供了簡單易用的API,可以幫助Java開發(fā)者在項目中輕松地進行Excel文件的讀寫操作,支持讀取和寫入Excel文件,同時支持常見的Excel格式,如.xls和.xlsx。
EasyExcel具有以下主要特點:
- 簡單易用:EasyExcel提供了簡潔清晰的API,使得開發(fā)者可以輕松地進行Excel文件的讀寫操作,無需過多的復(fù)雜配置。
- 高效性能:EasyExcel采用了基于流的方式進行Excel文件的讀寫,同時使用了緩沖區(qū)等技術(shù)來提升讀寫效率,具有較高的性能。
- 功能強大:EasyExcel支持對Excel文件進行靈活的讀寫操作,可以讀取Excel文件中的數(shù)據(jù)并轉(zhuǎn)換為Java對象,也可以將Java對象的數(shù)據(jù)寫入到Excel文件中。
- 跨平臺兼容性:EasyExcel是基于Java語言開發(fā)的,可以在各種操作系統(tǒng)上運行,且支持讀寫各種常見的Excel格式,如.xls和.xlsx等。
- 可擴展性:EasyExcel提供了豐富的擴展點和接口,開發(fā)者可以根據(jù)自己的需求進行定制和擴展,滿足不同場景下的需求。
總的來說,EasyExcel是一款功能強大且易于使用的Java Excel處理工具庫,被廣泛應(yīng)用于各種Java項目中,特別是對Excel文件讀寫操作比較頻繁的業(yè)務(wù)場景。
官方文檔地址EasyExcel
二、使用步驟
1.引入庫
我們創(chuàng)建maven項目,在pom.xml文件中添加依賴:
<!--easy excel依賴--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.3.4</version> </dependency> <!--lombok依賴 用來生成getter/setter/構(gòu)造函數(shù)的--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </dependency>
2.創(chuàng)建實體類
代碼如下(示例):
@Data //提供getter/setter @NoArgsConstructor //無參構(gòu)造 @AllArgsConstructor //含有全部參數(shù)的構(gòu)造 public class Goods { @ExcelIgnore //easyexcel注解 表示讀寫excel表忽略此列 int id; @ExcelProperty("編碼") //easyexcel注解 表示讀寫excel表對列名為“編碼”進行讀寫 String code; @ExcelProperty("名稱") String name; @ExcelProperty("價格") double price; @ExcelProperty("庫存") int num; @ExcelProperty("重量") double weight; @ExcelProperty("cpu") String cpu; @ExcelProperty("內(nèi)存") String memory; @ExcelProperty("機身內(nèi)存") String bodyMemory; @ExcelIgnore String createTime; @ExcelIgnore String updateTime; @ExcelIgnore String categoryCode; }
3.建立數(shù)據(jù)庫
因為我們在讀寫操作時需要有一定的數(shù)據(jù)源才能把讀寫操作更加明顯。
/* Navicat Premium Data Transfer Source Server : RpWn Source Server Type : MySQL Source Server Version : 50735 (5.7.35) Source Host : localhost:3306 Source Schema : demo Target Server Type : MySQL Target Server Version : 50735 (5.7.35) File Encoding : 65001 Date: 26/03/2024 16:39:43 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for goods -- ---------------------------- DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `price` decimal(10, 2) NULL DEFAULT NULL, `num` int(11) NULL DEFAULT 0, `weight` decimal(10, 2) NULL DEFAULT NULL, `cpu` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `memory` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `bodyMemory` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `isdel` bit(1) NULL DEFAULT b'0', `categoryCode` varchar(7) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 297 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of goods -- ---------------------------- INSERT INTO `goods` VALUES (10, '8JxeXVKZkP', '11213', 342.25, 632, 891.65, 'jwkMVVsIsf', '2TuPtOEmMY', 'Ywp6WoBoTl', '2024-03-13 15:15:44', '2024-03-15 19:46:52', b'0', '10202'); INSERT INTO `goods` VALUES (11, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-13 16:09:48', '2024-03-15 19:46:52', b'1', '10203'); INSERT INTO `goods` VALUES (12, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-13 16:15:57', '2024-03-15 19:46:52', b'0', '10204'); INSERT INTO `goods` VALUES (13, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-13 17:14:59', '2024-03-15 19:46:52', b'0', '10301'); INSERT INTO `goods` VALUES (14, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-15 14:53:58', '2024-03-15 19:46:52', b'0', '10302'); INSERT INTO `goods` VALUES (15, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-15 15:00:08', '2024-03-15 19:46:52', b'0', '10401'); INSERT INTO `goods` VALUES (16, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-15 15:00:13', '2024-03-15 19:46:52', b'1', '10402'); INSERT INTO `goods` VALUES (17, '123', '12', 1110.00, 210, 11.00, '12', '21', '32 b', '2024-03-15 17:55:20', '2024-03-15 19:46:52', b'0', '1010101'); INSERT INTO `goods` VALUES (18, 'qq', '112', 1.00, 1, 1.00, '1', '1', '123', '2024-03-15 18:50:12', '2024-03-15 19:46:52', b'0', '1010102'); INSERT INTO `goods` VALUES (19, '11213', '無敵暴龍戰(zhàn)神', 110.00, 10, 13111.00, '1451', '142', '1423', '2024-03-15 19:09:53', '2024-03-15 19:46:52', b'0', '1010103'); INSERT INTO `goods` VALUES (20, 'GCAn5xkhVy', 'ambi-Raspberry', 91.01, 407, 180.74, 'Hkm7kRcl6I', 'FHvqdmS6SJ', 'ILGoivG3bp', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010201'); INSERT INTO `goods` VALUES (21, 'TeygdLkvdh', 'vrape elite', 990.81, 625, 411.26, 'gYQj6zvQiS', 'kMVZXbpAUV', 'kHnRT7ksaS', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010202'); INSERT INTO `goods` VALUES (22, 'LNwjlXxjNr', 'omni-Apcle', 960.91, 564, 515.32, 'LQI00Ov0N5', '6duf1gDWfl', 'FE3EnBhCm3', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010203'); INSERT INTO `goods` VALUES (23, 'jgP7RNAxIm', 'Cherry premium', 765.80, 229, 922.03, 'RphJtpk0yq', 'bwkpOP0xrf', 'YYktTwd8RL', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010301'); INSERT INTO `goods` VALUES (24, 'Vuwp9T6Xoc', 'Strawberry premium', 327.73, 207, 483.71, 'dJptxXoG3g', '7W9aNT3YIw', 'ySVvlIl9bS', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010302'); INSERT INTO `goods` VALUES (25, 'XNfAc4CGcc', 'ultra-Mahgo', 609.87, 949, 386.22, '8hfxX9sWKL', 'uif9nrBYg6', 'N6NFLIKMHS', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1020101'); INSERT INTO `goods` VALUES (26, 'jC6omI1LRF', 'Orange', 702.47, 247, 380.92, 'JF47lnS0Ln', '2NQDhyOepP', 'TtQxIBYvJC', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1020102'); INSERT INTO `goods` VALUES (27, 'ToQNHEcFF7', 'Rambutan elite', 166.33, 471, 534.81, 'o8kHT3DYTm', 'PZYUKx2mKE', '1K3z3PEion', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1030101'); INSERT INTO `goods` VALUES (28, 'DOqVaUOxxX', 'omni-Manao', 483.54, 964, 432.00, 'nZq8jcRRZc', 'd6GPizay4L', 'evU3hBvO75', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1030102'); INSERT INTO `goods` VALUES (29, 'yktNTOYnCB', 'Pluots', 92.17, 432, 350.00, 'xLyjlwWZyr', 'shIVVKRoyq', 'CQRiONav9n', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '101'); INSERT INTO `goods` VALUES (30, 'h363yMOkgx', 'Strawberry', 994.03, 356, 693.20, 'EdvpRzfBx7', 'wOHno9Jz9i', 'UBuS5mBqc1', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '102'); INSERT INTO `goods` VALUES (31, 'rEaMNLqLeC', 'Cherry', 379.39, 662, 808.42, 'citpl2UEcL', 'AGSi2euAgD', 'lv4HBC865S', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '103'); INSERT INTO `goods` VALUES (32, 'EH19SlGYZj', 'Rambutan', 846.04, 75, 746.55, 'GXQMiPnPAJ', 'Xsn1EykF2W', '8r9fQIvV2m', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '104'); INSERT INTO `goods` VALUES (33, '1RZU3Tqk7x', 'Grape', 13.95, 823, 216.07, '874XE6Vfn8', 'v4QVOstgxz', 'UTpwHaMJbJ', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10101'); INSERT INTO `goods` VALUES (34, 'RSWbeUZiV0', 'Orange', 28.17, 774, 390.75, '5XymcnPLNI', 'xPkIHsRb87', '5wsV0pY08i', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10102'); INSERT INTO `goods` VALUES (35, 'i63Ka18rPr', 'Pluots premium', 697.21, 637, 254.10, 'XTvctbht7g', 'SqmbRxUj93', 'JT0I7jpIKz', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10103'); INSERT INTO `goods` VALUES (36, 'juAaluEVw2', 'Plzots mini', 820.39, 975, 877.59, 'aeKNUJfrMJ', 'vovuBeT0fd', 'xpYxNtS6g7', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10104'); INSERT INTO `goods` VALUES (37, 'ILMzyZAI5P', 'omni-Apple', 522.76, 391, 861.30, 'yek34RVacI', 'gmiHMwtOOa', 'Zz78bgunty', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10201'); INSERT INTO `goods` VALUES (38, 'BbUqlhempM', 'apple mini', 437.47, 997, 494.17, 'hXHUcRt2SU', 'bSRStT87H0', 'sxrB9HrjoA', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10202'); INSERT INTO `goods` VALUES (39, 'q4a9NkNyxf', 'Orange', 480.17, 63, 884.94, 'kyOD6tFQXP', 'fZvn2xuQjj', '89Tq4sfgCz', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10203'); INSERT INTO `goods` VALUES (40, 'fOjYWHi8ua', 'Grape premium', 650.66, 566, 841.37, 'G8oRswf3KW', 'PrKkVnkD7O', 'HsowQhNHog', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10204'); INSERT INTO `goods` VALUES (41, 'S4afyOy3lL', 'ambi-Rarpberry', 362.22, 153, 235.46, 'ZdI09ZjEu1', 'nzK0o8QcNC', 'vIdsY2B2S2', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10301'); INSERT INTO `goods` VALUES (42, '31u5gpIuc2', 'Mango', 113.45, 227, 250.62, 'XpjLaU4EHt', 'yJj1BCfGoc', 'N1Ao1bU0RP', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10302'); INSERT INTO `goods` VALUES (43, '4g51Wc0jcB', 'Pluots pro', 303.28, 795, 89.98, 'Acqc5kHe2p', 'CRTHYHLP5B', 'liTcPXWhdq', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10401'); INSERT INTO `goods` VALUES (44, '84ZehUTLjD', 'Raspberry', 539.56, 306, 587.33, 'Dx7KhBN5U9', 'ZqqZXTloyl', 'ux69ulYjju', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10402'); INSERT INTO `goods` VALUES (45, 'umYoiRRix7', 'Chdrry', 103.36, 459, 570.75, 'iZPw211fEu', 'Nbnd5HrBHp', 'QSwseMu3Ej', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010101'); INSERT INTO `goods` VALUES (46, 'IuvvAf5EsI', 'ultra-Maggo', 628.76, 494, 765.33, '2w7BLgJvQu', 'Oc1xPdT0yd', 'qWWHjE1UTc', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010102'); INSERT INTO `goods` VALUES (47, '1Hwkg09RUl', 'Pluots', 745.62, 138, 601.36, 'SRzYABnSID', 'TCvzR1TAtc', 'Vxvndc4dj3', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010103'); INSERT INTO `goods` VALUES (48, '9LSHUqpgP0', 'Cherry pro', 453.36, 780, 583.65, 'bQyrF7GWhe', '1DhzUp6X7p', '0AWyRCmycj', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010201'); INSERT INTO `goods` VALUES (49, 'TP5PbkIcW7', 'Grahe', 357.14, 796, 755.99, 'FzmR1fQm0H', 'HGxmRasHEy', 'mleG0TTni5', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010202'); SET FOREIGN_KEY_CHECKS = 1;
4.先建兩個excel表
可以像我一樣放在項目里,當(dāng)然你放的位置和文件名都隨意 。
5.書寫Mapper
<!--將數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出到excel文件的映射--> <select id="queryAll" resultType="goods"> select * from goods where isdel = 0 </select> <!--將excel文件數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫的映射 使用foreach批量添加--> <insert id="addManyGoods"> insert into goods (code, name, price, num, weight, cpu, memory, bodyMemory) values <foreach collection="list" item="it" separator=","> (#{it.code},#{it.name},#{it.price},#{it.num},#{it.weight},#{it.cpu},#{it.memory},#{it.bodyMemory}) </foreach> </insert>
6.書寫測試類
簡單使用測試類來進行測試。
SqlSession session = FactoryUtil.getFactory().openSession(true); GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class); private List<Goods> data() { //調(diào)用方法獲取數(shù)據(jù)庫數(shù)據(jù) return goodsMapper.queryAll(); } //寫入excel操作 public void testSimpleWrite() { String fileName = ".....\\Shop\\src\\main\\excel\\Goods.xlsx"; EasyExcel.write(fileName, Goods.class) .sheet("模板") .doWrite(this::data); } //讀excel表,寫入數(shù)據(jù)庫操作 public void testSimpleRead() { String fileName = ".......\\Shop\\src\\main\\excel\\Goods2.xlsx"; EasyExcel.read(fileName, Goods.class, new PageReadListener<Goods>(dataList -> { System.out.println(dataList.size()); int n = goodsMapper.addManyGoods(dataList); System.out.println(n); })).sheet().doRead(); }
總結(jié)
EasyExcel還有很多的屬性,下方是為大家總結(jié)的常用api。
- 數(shù)據(jù)讀取和寫入:EasyExcel提供了簡單易用的API來讀取和寫入Excel文件中的數(shù)據(jù)。
- 支持多種數(shù)據(jù)格式:EasyExcel支持讀寫多種常見的Excel格式,包括.xls和.xlsx等。
- 數(shù)據(jù)轉(zhuǎn)換:EasyExcel支持將Excel文件中的數(shù)據(jù)轉(zhuǎn)換為Java對象,并支持將Java對象的數(shù)據(jù)寫入到Excel文件中。
- 樣式設(shè)置:EasyExcel允許用戶設(shè)置單元格樣式、字體樣式、邊框樣式等,以美化Excel文件。
- 事件監(jiān)聽器:EasyExcel提供了事件監(jiān)聽器接口,允許用戶在讀取和寫入Excel文件時注冊監(jiān)聽器來處理各種事件。
- 數(shù)據(jù)校驗:EasyExcel支持對Excel文件中的數(shù)據(jù)進行校驗,以確保數(shù)據(jù)的有效性和完整性。
- 大數(shù)據(jù)處理:EasyExcel針對大數(shù)據(jù)量的Excel文件讀寫進行了優(yōu)化,具有較高的性能和效率。
- 異常處理:EasyExcel提供了異常處理機制,允許用戶捕獲和處理讀寫過程中可能出現(xiàn)的異常。
- 可配置性:EasyExcel提供了豐富的配置選項和參數(shù),允許用戶根據(jù)需求進行定制和調(diào)整。
- 擴展性:EasyExcel具有良好的擴展性,允許用戶根據(jù)需要編寫自定義的擴展插件和功能模塊。
總的來說,EasyExcel作為一款功能豐富的Excel處理工具庫,具有許多屬性和功能,可以滿足各種不同場景下的Excel文件讀寫需求,并且易于使用和擴展。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實現(xiàn)動態(tài)配置及項目打包部署上線功能
本文講解的是如何使用Spring動態(tài)配置文件,實現(xiàn)不同環(huán)境不同配置,靈活切換配置文件;以及講述了如何使用?Maven?打包,然后上傳至Linux服務(wù)器進行部署,對SpringBoot打包部署上線過程感興趣的朋友一起看看吧2022-10-10Lombok插件有望被Intellij IDEA收編以改善兼容性問題(推薦)
這篇文章主要介紹了Lombok插件有望被Intellij IDEA收編以改善兼容性問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08springboot中nacos-client獲取配置的實現(xiàn)方法
本文主要介紹了springboot中nacos-client獲取配置的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Java中雙重檢查鎖(double checked locking)的正確實現(xiàn)
雙重檢查鎖(Double-Check Locking),顧名思義,通過兩次檢查,并基于加鎖機制,實現(xiàn)某個功能,下面這篇文章主要給大家介紹了關(guān)于Java中雙重檢查鎖(double checked locking)的相關(guān)資料,需要的朋友可以參考下2021-09-09Java中的NoSuchMethodException異常原因以及解決方案詳解
這篇文章主要介紹了Java中的NoSuchMethodException異常原因以及解決方案詳解,NoSuchMethodException是Java反射機制中的異常,在嘗試通過反射獲取方法時,找不到指定的方法,通常發(fā)生在調(diào)用?Class?對象的方法時,當(dāng)方法名或方法參數(shù)不匹配時拋出該異常,需要的朋友可以參考下2024-02-02Springboot非分布式定時任務(wù)實現(xiàn)代碼
這篇文章主要介紹了Springboot非分布式定時任務(wù)實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11