.net core3.1 從excel表讀取(導入)數據 實戰


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM