話不多說,直接上操作:(本文是從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表讀取(導入)數據過程及代碼,若有不足之處請指正,謝謝。
