public BaseOutput UploadExcelFile(List <IFormFile> files, string priceSheetName) { if (files == null || files.Count == 0) { return(Fail("未上传文件")); } if (files.Count != 1) { return(Fail("一次只能上传一个文件")); } var formFile = files[0]; if (formFile.Length == 0) { return(Fail("文件不能为空")); } var now = DateTime.Now; var directory = Path.Combine(Directory.GetCurrentDirectory(), "files", now.ToString("yyyy"), now.ToString("MM"), now.ToString("dd")); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } var fileName = $"{MD5.Encrypt(formFile.OpenReadStream())}-{formFile.FileName}"; if (!System.IO.File.Exists(Path.Combine(directory, fileName))) { var extension = Path.GetExtension(formFile.FileName); var workBook = ExcelUtil.GetWorkbook(extension, formFile.OpenReadStream()); var dic = ExcelUtil.ImportExcelFile(workBook, priceSheetName); if (dic.Count == 0) { return(Fail("价格列表为空")); } if (dic.Values.Any(f => !Regex.IsMatch(StringUtil.RemoveSpace(f), @"\d+(\.\d+)?"))) { return(Fail("价格不格式不正确")); } var mapList = ExcelUtil.GetMap <Darunfa>(); var headerRow = ExcelUtil.FindHeaderRow(workBook, mapList); //寻找标题行 var list = ExcelUtil.ImportExcelFile <Darunfa>(headerRow, mapList); foreach (var item in list) { if (!string.IsNullOrEmpty(item.Request) && dic.ContainsKey(item.Request)) { item.Price = dic[item.Request]; item.Price = string.IsNullOrWhiteSpace(item.Price) ? "0" : Regex.Replace(item.Price, @"\s+", string.Empty); if (!string.IsNullOrWhiteSpace(item.Size)) { item.Size = Regex.Replace(item.Size, @"\s+", string.Empty); if (Regex.IsMatch(item.Size, @"\d+(\.\d+)?\*\d+(\.\d+)?")) { var size = Regex.Split(item.Size, @"\*+"); var total = Convert.ToDecimal(size[0]) * Convert.ToDecimal(size[1]) * Convert.ToDecimal(item.Num) * Convert.ToDecimal(item.Price); total = decimal.Round(total, 2); item.Total = (total == Convert.ToInt32(total) ? Convert.ToInt32(total) : total).ToString(); } } } } var data = ExcelUtil.CreateExcel(extension, list, mapList, headerRow); if (!System.IO.File.Exists(Path.Combine(directory, fileName))) { System.IO.File.WriteAllBytes(Path.Combine(directory, fileName), data); } } var output = new BaseOutput <string>(); output.Data = $"/files/{now.ToString("yyyy")}/{now.ToString("MM")}/{now.ToString("dd")}/{fileName}"; return(output); }