話不多說,直接上操作:(本文是從excel表讀取數據輸出到控制台)
1.數據准備,根據數據表結構新建excel表,放入一些測試數據,數據表結構如下圖1:
圖1 數據表結構
excel數據如下圖2:(建議excel表列名稱和數據表的列名保持一致)
圖2 excel表數據
2.新建一個控制器和業務邏輯代碼(用於添加數據到數據庫),在控制其中添加一個頁面,並放入一個文件域和“導入數據”按鈕,
控制器代碼如下:
[Route("[controller]")] public class TestController : Controller { [Route("[action]")] public async Task<IActionResult> Index() { return View(); }
/// <summary> /// 導入excel數據 /// </summary> /// <returns></returns> [Route("ImportExcelData")] public ResponseData<List<TableLawyer>> ImportExcelData() { var response = new ResponseData<List<TableLawyer>>(); var lawyers = new List<TableLawyer>(); var files = Request.Form.Files; if (files == null || files.Count <= 0) { response.Result = false; response.Message = "未獲取任何文件信息"; return response; } if (files.Count > 1) { response.Result = false; response.Message = "僅支持單文件加載"; return response; } using (var stream = files.FirstOrDefault()?.OpenReadStream()) { using var ep = new ExcelPackage(stream); using var worksheet = ep.Workbook.Worksheets.FirstOrDefault(); //行 var columns = worksheet?.Dimension.Columns; //列 var rows = worksheet?.Dimension.Rows; var columnName = new Dictionary<int, string>();//存儲列名 for (var i = 1; i <= rows; i++) { var model = new TableLawyer(); for (var j = 1; j <= columns; j++) { var value = worksheet.Cells[i, j].Value.ToString(); if (string.IsNullOrEmpty(value)) { continue; } //第一行的列都是列名 if (i == 1) { columnName.Add(j, value); continue; } switch (columnName[j]) { case nameof(TableLawyer.LawyerId): model.LawyerId = Convert.ToInt32(value); break; case nameof(TableLawyer.LawyerName): model.LawyerName = value; break; case nameof(TableLawyer.Status): model.Status = Enum.Parse<EnumLawyerStatus.Value>(value); break; } } if (model != null && model.LawyerId > 0) { lawyers.Add(model); } } //lawyers 即需要的數據列表,調用相關業務邏輯方法插入到數據庫即可 } response.Result = lawyers.Any(); response.Data = lawyers; //lawyers即從excel中讀取到的對應實體列表數據 response.Message = response.Result ? "獲取excel表數據成功" : "獲取excel表數據失敗"; return response; }
}
前端頁面代碼代碼如下:
<input type="file" id="excelFile" /> <input type="button" id="importExcelData" value="導入數據" /><br>
javascript代碼如下:
<script> /** * 導入數據按鈕點擊事件 */ $("#importExcelData").on("click", function () { var $file = $("#excelFile"); if (!$file || !$file.val()) { showMsg("未獲取到任何文件"); return; } var formData = new FormData(); formData.append("file", $file[0].files[0]); console.log("點擊導入數據按鈕"); $.ajax({ url: "/test/ImportExcelData", data: formData, type: "post", processData: false, contentType: false, dataType: "json", success: function (res) { if (res && res.Result) { console.log(res.Data); } else { console.log(res.Message); } } }); }); </script>
選擇文件,點擊導入數據,可在控制台中看到獲取到的數據列表,如圖3:
圖3 從excel成功獲取數據
附:前文用到的ResponseData<T>返回模型
{ /// <summary> /// 帶返回數據請求返回結果模型 /// </summary> /// <typeparam name="T"></typeparam> [JsonObject] [Serializable] public class ResponseData<T> { public bool Result { get; set; } public string Message { get; set; } public T Data { get; set; } } /// <summary> /// 請求返回結果模型 /// </summary> [JsonObject] [Serializable] public class ResponseData : ResponseData<dynamic> { } }
以上便是我的從excel表讀取(導入)數據過程及代碼,若有不足之處請指正,謝謝。