.net6 匯入匯出

Twolp發表於2024-06-26

一.下載依賴包 (MiniExcel)

二.匯出

/// <summary>
/// 匯出(使用於檔案較小,資料量不大的情況)
/// </summary>
/// <param name="pageIndex">頁索引</param>
/// <param name="pageSize">頁容量</param>
/// <param name="userName">查詢條件</param>
/// <returns></returns>
[HttpGet]
public IActionResult Upload(int pageIndex, int pageSize, string? userName)
{
    //源資料
    var values = _userService.UserList(pageIndex, pageSize, userName).list;
    var data = new List<object>();
    foreach (var item in values)
    {
        data.Add(new
        {
            //更改頭部欄位名稱
            編號 = item.UserId,
            使用者名稱 = item.UserName,
            密碼 = item.Password,
            新增時間 = item.AddTime,
            是否刪除 = item.IsDel ? "是" : "否"

        });
    }
    //開闢記憶體空間
    var memoryStream = new MemoryStream();
    //寫入資料
    memoryStream.SaveAs(data);
    //返回檔案流 (從第一行讀取到最後)
    memoryStream.Seek(0, SeekOrigin.Begin);
    //"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" =>excel格式
    //memoryStream =>檔案流
    return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    {
        //檔名
        FileDownloadName = "demo.xlsx"
    };
}

前臺呼叫(vue)

function daoImport() {
    location.href = "http://localhost:35891/api/Users/Upload?pageIndex=" + form.pageIndex + "&pageSize=" + form.pageSize + "&userName=" + form.userName + "";
}

三.匯入

 /// <summary>
 /// 匯入使用者
 /// </summary>
 /// <param name="file"></param>
 /// <returns></returns>
 [HttpPost]
 public IActionResult Import(IFormFile file)
 {
     //判斷條件(封裝到公共類中 可不寫)
     //var isExcel = Common.PublicClass.IsExcel(file);
     //if (!isExcel)
     //{
     //    return Ok("檔案為空或者檔案格式不正確");
     //}

     //在記憶體中開闢空間
     var memory = new MemoryStream();
     //將檔案流寫入到記憶體中
     file.CopyTo(memory);
     //將記憶體流轉為excel
     var list = memory.Query<UserInfo>().ToList();
     //呼叫服務層方法 批次新增
     int n = _userService.AddRange(list);
     return Ok(n);
 }

前臺呼叫 Element-plus 官網 Upload
記得更改Action地址

封裝驗證Excel合法

 public static bool IsExcel(IFormFile file)
 {
     if (file == null)
     {
         return false;
     }
     string lastName = Path.GetExtension(file.FileName);
     if (lastName != ".xls" && lastName != ".xlsx")
     {
         return false;
     }
     if (file.Length > 1024 * 1024 * 5)
     {
         return false;
     }
     return true;
 }

相關文章