This is my method:
public async Task<IActionResult> ConvertToPdf([FromQuery] Shop_Menu_Nutrition_Bom entity)
{
try
{
var rootPath = ConfigHelper.GetValue<string>("rootPath");
Directory.CreateDirectory(rootPath + "/Upfile/Temporary/Tempfile");
string p = ("/Upfile/Temporary/Tempfile");
var uploadPath = rootPath + p;
var tempPath = rootPath + "/Upfile/Template/";
var list = await _shopMenuBormBll.GetBormList(entity);
foreach (var item in list)
{
List<TemplateDataModel> templateDataModels = new List<TemplateDataModel>();
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.Title = "导出";
excelconfig.TitleFont = "微软雅黑";
excelconfig.TitlePoint = 25;
excelconfig.FileName = "数据.xlsx";
excelconfig.IsAllSizeColumn = true;
////每一列的设置,没有设置的列信息,系统将按datatable中的列名导出
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 1, value = item.MenuInfo.Menu_Name });
//体重
if (item.EatRed.body_weight == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 6, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.body_weight == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 6, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.body_weight == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 6, datatype = "backgroundColor", backgroundColor = "red" });
}
//血糖
if (item.EatRed.blood_sugar == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 7, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_sugar == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 7, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_sugar == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 7, datatype = "backgroundColor", backgroundColor = "red" });
}
//血脂
if (item.EatRed.blood_lipids == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 8, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_lipids == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 8, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_lipids == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 8, datatype = "backgroundColor", backgroundColor = "red" });
}
//血尿酸
if (item.EatRed.blood_uric_acid == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 9, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_uric_acid == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 9, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_uric_acid == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 9, datatype = "backgroundColor", backgroundColor = "red" });
}
//血压
if (item.EatRed.blood_pressure == 1)
{
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 10, datatype = "backgroundColor", backgroundColor = "green" });
}
else if (item.EatRed.blood_pressure == 2)
{
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 10, datatype = "backgroundColor", backgroundColor = "yellow" });
}
else if (item.EatRed.blood_pressure == 3)
{
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 10, datatype = "backgroundColor", backgroundColor = "red" });
}
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 4, value = Math.Round((decimal)item.Gram.energyKcal, 0) + "千卡(Kcal)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 4, value = item.Gram.energyKcalNRV });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 5, value = item.Gram.protein.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 5, value = item.Gram.proteinNRV });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 6, value = item.Gram.fat.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 6, value = item.Gram.fatNRV });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 7, value = item.Gram.cho.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 7, value = item.Gram.choNRV });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 8, value = item.Gram.sugar.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 8, value = item.Gram.sugarNRV });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 9, value = Math.Round((decimal)item.Gram.na) + "毫克(mg)/" + item.Gram.salt.ToString() + "克(g)" });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 9, value = item.Gram.naNRV });
templateDataModels.Add(new TemplateDataModel { cell = 0, row = 15, value = item.TotalElement.energyKcal.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 15, value = item.TotalElement.protein.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 15, value = item.TotalElement.proteinAnima.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 15, value = item.TotalElement.proteinBeans.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 4, row = 15, value = item.TotalElement.proteinOther.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 5, row = 15, value = item.TotalElement.fat.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 6, row = 15, value = item.TotalElement.cho.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 8, row = 15, value = item.TotalElement.dietaryFiber.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 10, row = 15, value = item.TotalElement.cholesterol.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 11, row = 15, value = item.TotalElement.ash.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 12, row = 15, value = item.TotalElement.vitaminA.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 13, row = 15, value = item.TotalElement.cartotene.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 15, value = item.TotalElement.retinol.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 15, row = 15, value = item.TotalElement.thiamin.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 0, row = 19, value = item.TotalElement.riboflavin.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 1, row = 19, value = item.TotalElement.niacin.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 2, row = 19, value = item.TotalElement.vitaminC.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 3, row = 19, value = item.TotalElement.vitaminE_total.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 4, row = 19, value = item.TotalElement.vitaminE_α.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 5, row = 19, value = item.TotalElement.vitaminE_β_γ.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 6, row = 19, value = item.TotalElement.vitaminE_δ.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 7, row = 19, value = item.TotalElement.ca.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 8, row = 19, value = item.TotalElement.p.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 9, row = 19, value = item.TotalElement.k.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 10, row = 19, value = item.TotalElement.na.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 11, row = 19, value = item.TotalElement.mg.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 12, row = 19, value = item.TotalElement.fe.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 13, row = 19, value = item.TotalElement.zn.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 14, row = 19, value = item.TotalElement.se.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 15, row = 19, value = item.TotalElement.cu.ToString() });
templateDataModels.Add(new TemplateDataModel { cell = 16, row = 19, value = item.TotalElement.mn.ToString() });
var fileName = "餐饮食品红绿灯营养标识信息_" + item.MenuInfo.Menu_Name + "_" + DateTime.Now.ToString("yyyyMMdd") + "_" + GetRealName() + ".xls";
var pdfName = "餐饮食品红绿灯营养标识信息_" + item.MenuInfo.Menu_Name + "_" + DateTime.Now.ToString("yyyyMMdd") + "_" + GetRealName() + ".pdf";
var memoryStream = ExcelHelper.ExportListByTempale(templateDataModels, tempPath + "餐饮食品红绿灯营养标识信息.xls");
using (FileStream file = new FileStream(uploadPath + "/" + fileName, FileMode.Create, System.IO.FileAccess.Write))
memoryStream.CopyTo(file);
string pdfPath = Path.ChangeExtension(uploadPath + "/" + fileName, ".pdf");
try
{
if (System.IO.File.Exists(uploadPath + "/" + fileName))
{
Workbook workbook = new Workbook();
workbook.LoadFromFile(uploadPath + "/" + fileName);
//设置内容适应页面宽度
workbook.ConverterSetting.SheetFitToWidth = true;
workbook.SaveToFile(pdfPath, Spire.Xls.FileFormat.PDF);
}
}
catch (NullReferenceException ex)
{
_logger.LogError("发生 NullReferenceException: " + ex.Message);
_logger.LogError(ex.StackTrace);
}
catch (FileNotFoundException ex)
{
_logger.LogError("发生 FileNotFoundException: " + ex.Message);
_logger.LogError(ex.StackTrace);
}
catch (Exception ex)
{
_logger.LogError("发生未知异常: " + ex.Message);
_logger.LogError(ex.StackTrace);
}
}
string[] files = Directory.GetFiles(rootPath + "/Upfile/Temporary/Tempfile", "*.xls");
foreach (string file in files)
{
System.IO.File.Delete(file);
}
var sourthPath = uploadPath;//需要压缩的文件夹
var zipPath = string.Format("BormPdf_{0:yyyyMMdd_HHmmss}", DateTime.Now) + ".zip";
var zipFile = rootPath + "/Upfile/Zip/";//压缩需要创建的文件夹
SharpZipHelper.PackFiles(zipFile, zipPath, sourthPath);
Directory.Delete(rootPath + "/Upfile/Temporary/Tempfile", true); // 删除临时文件夹
return Success("/Upfile/Zip/" + zipPath);
}
catch (Exception ex)
{
return StatusCode(500, ex.Message);
}
}
The error information is as follows:
[2024-11-25 13:52:52,481 ][.NET ThreadPool Worker]发生未知异常: The type initializer for 'Spire.Xls.Core.Spreadsheet.XlsPageSetupBase' threw an exception.
[2024-11-25 13:52:52,498 ][.NET ThreadPool Worker] at Spire.Xls.Core.Spreadsheet.XlsPageSetupBase..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.XlsPageSetup..ctor(Object A_0)
at Spire.Xls.PageSetup..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.XlsWorksheet.InitializeCollections()
at Spire.Xls.Core.Spreadsheet.XlsWorksheetBase..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.XlsWorksheet..ctor(Object A_0)
at Spire.Xls.Worksheet..ctor(Object A_0)
at Spire.Xls.Core.Spreadsheet.Collections.XlsWorksheetsCollection.Add(String sheetName)
at Spire.Xls.Core.Spreadsheet.XlsWorkbook.帰(Int32 A_0)
at Spire.Xls.Core.Spreadsheet.XlsWorkbook..ctor(Object A_0)
at Spire.Xls.Workbook..ctor()
at somal.api.Areas.Shop.Controllers.ShopMenuBormController.ConvertToPdf(Shop_Menu_Nutrition_Bom entity) in E:\MyWork\ctms.nutrition\webapi\somal.api\Areas\Shop\Controllers\ShopMenuBormController.cs:line 844