首页 > 解决方案 > 使用在 Azure 应用服务上运行的 ASP.NET Core 将 Excel(xls、xlsx)文件转换为 PDF

问题描述

我不确定以前是否有人问过这个问题。我一直在从事一个项目,该项目需要使用在Azure App Service上运行的ASP.NET Core WebAPI将 Microsoft Office 文档转换为 PDF,而无需购买任何转换许可证。在这个讨论的帮助下,我完成了 doc 和 docx 部分。

然而,尽管 OpenXMLSDK-PowerTools 有一些“与 Excel 相关的”功能,但我无法将 Excel 文件(xls、xlsx)转换为 HTML(就像上面提到的讨论一样,我正在尝试将 Excel 转换为 HTML,然后再转换为 PDF)。下面的代码总是抱怨找不到表。

SpreadsheetDocument document = SpreadsheetDocument.Open(path, true);
htmlText = SmlToHtmlConverter.ConvertTableToHtml(document, new SmlToHtmlConverterSettings(), "Sheet1").ToString();
ArgumentException: Table not found
 Parameter name: tableName
OpenXmlPowerTools.SmlDataRetriever.RetrieveTable(SpreadsheetDocument sDoc, string tableName) in SmlDataRetriever.cs
+
            var styleXDoc = sDoc.WorkbookPart.WorkbookStylesPart.GetXDocument();
OpenXmlPowerTools.SmlToHtmlConverter.ConvertTableToHtml(SpreadsheetDocument sDoc, SmlToHtmlConverterSettings settings, string tableName) in SmlToHtmlConverter.cs
+
            var rangeXml = SmlDataRetriever.RetrieveTable(sDoc, tableName);
MyProject.Controllers.FileUploadController.ProcessFile(string path, string name, FileType fileType) in FileUploadController.cs
+
                    htmlText = SmlToHtmlConverter.ConvertTableToHtml(document, new SmlToHtmlConverterSettings(), "Sheet1").ToString();
XFStdOfficeDocWebAPI.Controllers.FileUploadController.Index(List<IFormFile> files) in FileUploadController.cs
+
                    FileInfo htmlFileInfo = ProcessFile(filePath, fileName, fileType);
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

我被困在这里,不知道下一步该怎么做。任何意见/帮助将不胜感激!

标签: c#excelasp.net-core

解决方案


推荐阅读