#nullable enable using Furion.FriendlyException; using Furion; using Microsoft.AspNetCore.Http; using OfficeOpenXml.Style; using OfficeOpenXml; using Microsoft.Extensions.Configuration; namespace iWare.Wms.Core.Util { public static class ExcelUtil { /// /// 在文件中导出标准格式的数据 /// /// /// /// public static string ToExcel(List headers, List> data, string sheetName, string target, string fileName) { if (!target.EndsWith("\\")) { target += "\\"; } target += DateTime.Now.Ticks + "\\"; if (!Directory.Exists(target)) { Directory.CreateDirectory(target); } fileName = fileName + "[" + DateTime.Now.ToString("yyyy-MM-dd") + "]" + ".xlsx"; var path = target + fileName; using (var package = new ExcelPackage(new FileInfo(path))) { var worksheet = package.Workbook.Worksheets.Add(sheetName); for (int j = 0; j < headers.Count; j++) { worksheet.Cells[1, j + 1].Value = headers[j]; worksheet.Cells[1, j + 1].Style.Font.Bold = true;//加粗 worksheet.Cells[1, j + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//水平居中 worksheet.Cells[1, j + 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;//垂直居中 worksheet.Cells[1, j + 1].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;//边框常规粗细 worksheet.Cells[1, j + 1].Style.Border.Left.Style = ExcelBorderStyle.Thin;//边框常规粗细 worksheet.Cells[1, j + 1].Style.Border.Right.Style = ExcelBorderStyle.Thin;//边框常规粗细 worksheet.Cells[1, j + 1].Style.Border.Top.Style = ExcelBorderStyle.Thin;//边框常规粗细 } for (int i = 0; i < data.Count; i++) { for (int j = 0; j < data[i].Count; j++) { worksheet.Cells[2 + i, j + 1].Value = data[i][j]; } } package.Save(); } return path; } /// /// 在response中导出标准格式的数据 /// /// /// /// public static void ToExcel(List headers, List> data, string sheetName, Stream newStream) { using (var package = new ExcelPackage(newStream)) { var worksheet = package.Workbook.Worksheets.Add(sheetName); for (int j = 0; j < headers.Count; j++) { worksheet.Cells[1, j + 1].Value = headers[j]; worksheet.Cells[1, j + 1].Style.Font.Bold = true;//加粗 worksheet.Cells[1, j + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//水平居中 worksheet.Cells[1, j + 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;//垂直居中 worksheet.Cells[1, j + 1].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;//边框常规粗细 worksheet.Cells[1, j + 1].Style.Border.Left.Style = ExcelBorderStyle.Thin;//边框常规粗细 worksheet.Cells[1, j + 1].Style.Border.Right.Style = ExcelBorderStyle.Thin;//边框常规粗细 worksheet.Cells[1, j + 1].Style.Border.Top.Style = ExcelBorderStyle.Thin;//边框常规粗细 } for (int i = 0; i < data.Count; i++) { for (int j = 0; j < data[i].Count; j++) { worksheet.Cells[2 + i, j + 1].Value = data[i][j]; } } package.Save(); } } /// /// 导入标准格式的数据文件 /// /// 上传的文件 /// public static void FromExcel(IFormFile file, out List headers, out List> data, out string sheetName) { if (file == null) throw Oops.Oh(ErrorCode.D8000); string key = "UploadFile:Excel"; var allowContentTypes = App.Configuration.GetSection($"{key}:contentType").Get>(); if (!allowContentTypes.Contains(file.ContentType)) throw Oops.Oh(ErrorCode.D8001); sheetName = ""; headers = new(); data = new(); using (var package = new ExcelPackage(file.OpenReadStream())) { var worksheet = package.Workbook.Worksheets.Count > 0 ? package.Workbook.Worksheets[0] : null; sheetName = package.Workbook.Worksheets.Count > 0 ? package.Workbook.Worksheets[0].Name : ""; var cellsCount = worksheet?.Cells?.Count() ?? 0; int col = 1; string? header = worksheet?.Cells[1, col++].Value?.ToString(); while (!string.IsNullOrEmpty(header)) { headers.Add(header); header = worksheet?.Cells[1, col++]?.Value?.ToString(); } var headersCount = headers.Count; if (headersCount == 0) return; var rowsCount = (int)Math.Ceiling(((double)cellsCount) / headersCount) - 1; for (var i = 0; i < rowsCount; i++) { List row = new(); for (var j = 0; j < headersCount; j++) { row.Add(worksheet?.Cells[i + 2, j + 1]?.Value); } data.Add(row); } } } } }