Microsoft.Office.Core 是在未引用的程序集中定义的。您必须添加对 assembly office 的引用,Version=15.0.0.0

Mar*_*rko 4 office-interop excel-interop .net-6.0

我正在使用 Visual Studio 2022。我创建了一个 .net 6 项目。我添加了 COM 引用:Microsoft Excel 16 对象库(Microsoft.Office.Interop.Excel) 和Microsoft Office 16 对象库(Microsoft.Office.Core)。

以下 Excel 互操作代码行抛出错误at SetElement(),无法构建:

Chart c = (Chart)wbSheets.Application.Workbooks[1].Charts.Add();
chart.SetElement(Microsoft.Office.Core.MsoChartElementType.msoElementChartTitleAboveChart);
Run Code Online (Sandbox Code Playgroud)

Microsoft.Office.Core... 在未引用的程序集中定义。您必须添加对 Assembly Office 的引用,Version=15.0.0.0, ..., PublicKeyToken=71e9bce111e9429c

一个非常奇怪的错误,Office 16 (Office 2016) 库需要引用 Office 15 (Office 2013)。

COM 引用和 C# 代码的完全相同的步骤在 .NET 4.8 Framework 中完美运行。因此,该问题特定于 .NET 6(可能是 .NET 5 和所有以前的 .NET Core 版本)。

使用 nuget 命令Install-Package MicrosoftOfficeCore -Version 15.0.0安装引用并手动删除以前的 v16 引用,确实解决了代码构建错误。但现在该依赖项有一个黄色三角形警告,该依赖项适用于 .NET 4.6-4.8 Framework,可能与 .NET 6 不兼容。

尽管如此,代码似乎可以工作并且生成了 Excel 文件。

但我会在答案中发布更好的解决方案。

Mar*_*rko 5

更好的解决方法是转到:

Solution Explorer > project > Dependencies > COM > select Microsoft.Office.Core > properties pane.
Run Code Online (Sandbox Code Playgroud)

最后一个属性是 Wrapper Tool,默认值为tlbimp

输入primary值,单击其他位置更新字段,问题就解决了。不需要 nuget 包。

从这里找到了这个晦涩的解​​决方案(最底部的帖子): https ://github.com/dotnet/project-system/issues/5735