c# - 如何在用 C# 编写的 web-API 中集成 COM 互操作(Excel、Ms Word 等的操作)?
问题描述
我正在尝试将 COM 互操作集成到我用 C# 编写的 Web API 中。并且似乎web api的.net核心无法支持COM技术。
这是我收到的错误消息:
FlicApi.Controllers.ButtonController.Post(string buttonId)
lambda_method(Closure , object , object[] )
Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(object target, object[] parameters)
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
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.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
有什么办法可以绕过net-core for web API不支持COM的这种情况?最终我想要实现的是调用一个 API 并在 Microsoft Excel 上进行一些操作。
这是我尝试过的:
// POST api/button/buttonId
[HttpPost("{buttonId}")]
public ActionResult<string> Post(string buttonId)
{
//Console.WriteLine(value);
//start Excel and get Application Object
oXL = new Excel.Application();
oXL.Visible = true;
//Get a new workbook.
oWB = oXL.Workbooks.Add(Missing.Value);
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
//Add table headers going cell by cell.
oSheet.Cells[1, 1] = "First Name";
oSheet.Cells[1, 2] = "Last Name";
oSheet.Cells[1, 3] = "Full Name";
oSheet.Cells[1, 4] = "Salary";
oWB.SaveCopyAs(@"/Users/eaxz/Desktop/book1.xlsx");
return "success";
}
解决方案
COM 互操作不是服务器端环境的好选择。您可以尝试一些第三方组件,例如GrapeCiy Document API
推荐阅读
- python - 使用 scikit learn 使用预先计算的余弦相似度矩阵进行层次聚类会产生错误
- java - 通过从 socket.io 发出值来有效地更新 Android seekbar
- coldfusion - Internet Explorer 11 和 Edge 中不可用的表单域
- django - 运行 Django 后端的应用程序出现 400 错误请求
- python - 如何遍历 pandas 数据框、检查条件、执行字符串操作和写入新列?
- c# - !(a == b) 和 a != b 之间有区别吗
- apache - .htaccess 阻止来自未知来源的发布请求
- php - tcpdf 错误:需要 GD 或 Imagik 但我安装了依赖项
- html - div 或 span 旁边的文本不起作用,我该如何解决这个问题?
- asp.net-core - 在 ASP.NET Core 中更改电子邮件工作流