File excelFile = new File(path);
if (!excelFile.exists()) {
throw new Exception("The specified excel file does not exist at path: " + path);
}
// 使用EasyExcel讀取檔案
List<SpdSurveyContainerEo> voList = new ArrayList<>();
// 獲取絕對路徑並初始化ExcelReader物件,用於讀取Excel檔案
try (ExcelReader excelReader = EasyExcel.read(excelFile.getAbsolutePath())
// 構建ExcelReader例項
.build()) {
// 配置讀取特定工作表,這裡設定為讀取第1個工作表
ReadSheet readSheet = EasyExcel.readSheet(1)
// 設定Java實體類與Excel表頭的對映關係,根據A類的屬性來解析資料
.head(A.class)
// 註冊一個讀取監聽器,處理逐行讀取的資料
.registerReadListener(new ReadListener<A>() {
// 當一行資料被解析時觸發此方法
@Override
public void invoke(A data, AnalysisContext context) {
// 將解析出的一行資料轉換成A物件,並新增到voList集合中
voList.add(data);
}
// 所有資料解析完畢後觸發此方法
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 可在此處新增所有資料解析完成後的處理邏輯,如關閉資源等
}// 完成監聽器配置
})
// 建立並返回已配置的ReadSheet物件
.build();
// 開始執行實際的讀取操作
excelReader.read(readSheet);// 透過ExcelReader讀取之前配置好的ReadSheet
} catch (Exception e) {
// 處理可能丟擲的異常,例如檔案讀取錯誤等
e.printStackTrace();
}
這段Java程式碼使用了阿里巴巴開源的EasyExcel庫來讀取指定Excel檔案中的資料。首先,它初始化了一個ExcelReader
物件,指向目標Excel檔案。然後,針對第一個工作表(索引為1),配置了一個ReadSheet
,指定資料模型為SpdSurveyContainerEo
類,這樣可以自動將Excel表格的列對應到這個Java物件的屬性上。同時註冊了一個ReadListener
,當讀取到Excel表格的每一行資料時,會呼叫invoke
方法,將當前行的資料轉換為SpdSurveyContainerEo
物件並加入到voList
列表中。最後,在讀取完所有資料後,還會呼叫doAfterAllAnalysed
方法,可用於執行後續的操作。透過呼叫excelReader.read(readSheet)
啟動實際的讀取過程。注意,這段程式碼應該在一個try-catch塊中以捕獲潛在的異常。