一、從EasyExcel讀取Excel數據
EasyExcel是一個基於Java語言的開源的Excel讀寫工具。它提供了簡單的API來操作Excel文件,而且相比於Apache POI等其他同類工具,EasyExcel的速度更快,功能更齊全。下面我們將從從EasyExcel讀取Excel數據這個方面,來詳細講解。
首先,我們需要引入EasyExcel的依賴:
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency>
接下來,我們就可以使用EasyExcel來讀取Excel數據了。下面是一個簡單的示例:
// 創建一個Excel讀取器 ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build(); // 讀取數據 excelReader.read(); // 關閉讀取器 excelReader.finish();
在上面的示例中,我們使用了EasyExcel提供的ExcelReader來讀取Excel文件,並且傳入了Excel文件路徑、數據對象的類型和數據監聽器。在這裡,DemoDataListener是數據監聽器,它實現了EasyExcel提供的AnalysisEventListener介面,用於解析Excel數據。
二、跳過Excel表頭讀取數據
在實際的應用中,我們通常需要從Excel文件中獲取數據,並且需要跳過表頭。EasyExcel提供了skipHeadRows()方法來實現這個功能。下面是一個示例:
ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).sheet().headRowNumber(1).doRead();
在這個示例中,我們使用了sheet()方法來獲取Excel表格,然後使用headRowNumber()方法指定表頭所在行的索引是1,最後使用doRead()方法來讀取數據,並且跳過了表頭。
三、從Excel模板讀取數據並寫入
除了從Excel文件中讀取數據,EasyExcel還可以從Excel模板中讀取數據,並且將數據寫入到Excel文件中。下面是一個示例:
// 定義模板對象 ExcelTemplate excelTemplate = ExcelTemplateFactory.fromClasspath("template.xlsx").defaultSheet(); // 導出數據到Excel文件 excelTemplate.writer() .put("title", "XXX公司員工信息表") .put("companyName", "XXX公司") .put("date", new Date()) .fill().finish();
在這個示例中,我們使用了ExcelTemplate來讀取指定路徑下的Excel模板文件,然後使用put()方法將數據寫入到Excel模板中,並且使用fill()方法將數據寫入到Excel文件中。
四、讀取Excel內容
在讀取Excel數據時,我們通常會遇到兩種類型的數據:字元串和數字。EasyExcel提供了Formatter實現類,可以將讀取到的字元串和數字格式化為Java對象。下面是一個示例:
@Data public class DemoData { @ExcelProperty(value = "字元串標題", index = 0) private String string; @ExcelProperty(value = "數字標題", index = 1) private Double doubleData; } public class DemoDataListener extends AnalysisEventListener<DemoData> { @Override public void invoke(DemoData demoData, AnalysisContext analysisContext) { System.out.println(demoData); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) {} } ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build(); excelReader.read(); excelReader.finish();
在這個示例中,我們定義了DemoData數據類,並且使用@ExcelProperty註解指定Excel數據的列名和列索引。然後在DemoDataListener監聽器中重寫invoke()方法,用來讀取Excel數據並轉換為Java對象。最後,在ExcelReader中讀取數據並使用DemoDataListener監聽器進行解析。
五、讀取Excel數據為空處理
在讀取Excel文件時,我們可能會遇到Excel表格中數據為空的情況,這時我們需要對空數據進行處理。EasyExcel提供了數據轉換介面來實現這個功能。下面是一個示例:
public class DemoDataListner extends AnalysisEventListener { @Override public void invoke(Object obj, AnalysisContext context) { if (obj instanceof List) { List list = (List)obj; if (CollectionUtils.isEmpty(list)) { // Do something } } } }
在這個示例中,我們在DemoDataListener數據監聽器中重寫了invoke()方法,在讀取數據之前先校驗數據是否為空。如果數據為空,我們就可以在這裡進行相應的處理。
六、讀取複雜Excel
在實際的應用中,Excel文件中可能會存在很多複雜的情況,比如單元格合併、多行標題、嵌套表格等。EasyExcel提供了一系列的介面來支持這些複雜的情況。下面是一個示例:
@Data public class DemoData { @ExcelProperty(value = {"表頭1", "子表頭1", "子子表頭1"}, index = 0) private String string; @ExcelProperty(value = {"表頭1", "子表頭1", "子子表頭2"}, index = 1) private Double doubleData; @ExcelProperty(value = {"表頭1", "子表頭2"}, index = 2) private String string1; @ExcelProperty(value = {"表頭2", "子表頭"}, index = 3) private String string2; } public class DemoDataListener extends AnalysisEventListener<DemoData> { @Override public void invoke(DemoData demoData, AnalysisContext context) { System.out.println(demoData); } @Override public void doAfterAllAnalysed(AnalysisContext context) {} } ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build(); excelReader.read(); excelReader.finish();
在這個示例中,我們使用了@ExcelProperty註解指定Excel數據的列名和列索引,並且使用value屬性來支持多行標題。
七、EasyExcel模板導出
在實際的應用中,我們通常需要將數據導出到Excel模板中。EasyExcel提供了一個簡單的API來實現這個功能。下面是一個示例:
// 定義Excel導出器 ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(templateInputStream).build(); // 寫入數據 excelWriter.fill(data, new FillConfig().setForceNewRow(Boolean.TRUE)); // 關閉Excel導出器 excelWriter.finish();
在這個示例中,我們使用了ExcelWriter來將數據寫入到Excel模板中,並且使用fill()方法來填充數據。注意,在填充數據時,我們需要使用FillConfig實例來指定新的行必須寫入數據。
八、EasyExcel導入資料庫
在讀取Excel數據後,我們需要將數據存儲到資料庫中。EasyExcel提供了簡單的API來實現這個功能。下面是一個示例:
@Data public class DemoData { @ExcelProperty(value = "用戶名", index = 0) private String username; @ExcelProperty(value = "密碼", index = 1) private String password; } public class DemoDataListener extends AnalysisEventListener<DemoData> { @Override public void invoke(DemoData demoData, AnalysisContext context) { System.out.println(demoData); // 保存數據到資料庫 User user = new User(); user.setUsername(demoData.getUsername()); user.setPassword(demoData.getPassword()); userRepository.save(user); } @Override public void doAfterAllAnalysed(AnalysisContext context) {} } ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build(); excelReader.read(); excelReader.finish();
在這個示例中,我們使用了DemoData數據類存儲Excel數據,並且通過DemoDataListener數據監聽器將數據保存到資料庫中。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257837.html