一.下載依賴包 (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;
}