PowerPoint.Application.Presentations 缺少 MsoTriState
PowerPoint.Application.Presentations missing MsoTriState
我正在尝试使用 C# 中的 PowerPoint 自动执行流程,为此我想打开(或创建新的)PowerPoint 演示文稿,添加幻灯片,然后保存文档。
我已经在我的机器上安装了整个 office 2019 软件包,并且可以通过引用 Interop.Microsoft.Office.Interop.PowerPoint
(来自 Microsoft PowerPoint 16.0 对象库参考)和 [= 来访问 ppt api 13=](来自 Microsoft Office 16.0 对象库参考)。
我尝试使用以下代码打开 powerpoint:
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
class PowerPointManager
{
public PowerPointManager()
{
string powerPointFileName = @"C:\temp\test.pptx";
Application pptApplication = new Application();
Presentation ppt = pptApplication.Presentations.Open(powerPointFileName, MsoTriState.msoTrue); //MsoTriState comes from Microsoft.Office.Core
}
}
但是这会导致 pptApplication.Presentations.Open
)
行出错
Error CS0012 The type 'MsoTriState' is defined in an assembly that is not referenced. You must add a reference to assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
尽管 MsoTriState
最明确地定义在 Microsoft.Office.Core
中,它是 office.dll
程序集的一部分 (msdn reference)
当我尝试使用 VS2019 的快速操作时,我会看到“添加对“office 版本 15.0.0.0”的引用”选项。执行此快速操作会打开引用管理器,但不会添加任何引用。手动搜索“Office”也不会产生任何简单命名为“office”的结果。最接近的是“Microsoft Office 16.0 对象库”,已被引用。
据我所知,这与函数参数要求的 MsoTriStrate 相同,那么为什么它不接受这个?尝试用 MsoTriState 值代替它的整数值(例如 -1 代表真)也不起作用。
使用 .NET Core 3.1 WinForms,Office 2019(包括 powerpoint)32 位,在 W10 x64 企业版和 Visual Studio 2019 上安装了 Office/Sharepoint 开发工具集。
看起来 tlbimp
在某个时候不正确地生成了互操作程序集。您可以在 \obj\Debug\netcoreapp3.1\Interop.Microsoft.Office.Interop.PowerPoint.dll
.
找到该程序集
要正确重新生成它,您需要执行以下操作:
- 删除对“Microsoft PowerPoint 16.0 对象库”的引用。清理并重建项目。此时您也可以尝试卸载项目并手动删除
bin
和 obj
文件夹。
- 添加对“Microsoft 15.0 对象库”和“Microsoft 16.0 对象库”的引用。
- 添加对“Microsoft PowerPoint 16.0 对象库”的反向引用,并再次清理并重建项目。
执行这些步骤后,我的 .NET Core 3.1 WinForms 项目编译成功。
在我的案例中,.csproj
文件的内容如下:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<COMReference Include="Microsoft.Office.Core">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>8</VersionMinor>
<VersionMajor>2</VersionMajor>
<Guid>2df8d04c-5bfa-101b-bde5-00aa0044de52</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Interop.PowerPoint">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>12</VersionMinor>
<VersionMajor>2</VersionMajor>
<Guid>91493440-5a91-11cf-8700-00aa0060263b</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
</ItemGroup>
</Project>
我正在尝试使用 C# 中的 PowerPoint 自动执行流程,为此我想打开(或创建新的)PowerPoint 演示文稿,添加幻灯片,然后保存文档。
我已经在我的机器上安装了整个 office 2019 软件包,并且可以通过引用 Interop.Microsoft.Office.Interop.PowerPoint
(来自 Microsoft PowerPoint 16.0 对象库参考)和 [= 来访问 ppt api 13=](来自 Microsoft Office 16.0 对象库参考)。
我尝试使用以下代码打开 powerpoint:
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
class PowerPointManager
{
public PowerPointManager()
{
string powerPointFileName = @"C:\temp\test.pptx";
Application pptApplication = new Application();
Presentation ppt = pptApplication.Presentations.Open(powerPointFileName, MsoTriState.msoTrue); //MsoTriState comes from Microsoft.Office.Core
}
}
但是这会导致 pptApplication.Presentations.Open
)
Error CS0012 The type 'MsoTriState' is defined in an assembly that is not referenced. You must add a reference to assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'
尽管 MsoTriState
最明确地定义在 Microsoft.Office.Core
中,它是 office.dll
程序集的一部分 (msdn reference)
当我尝试使用 VS2019 的快速操作时,我会看到“添加对“office 版本 15.0.0.0”的引用”选项。执行此快速操作会打开引用管理器,但不会添加任何引用。手动搜索“Office”也不会产生任何简单命名为“office”的结果。最接近的是“Microsoft Office 16.0 对象库”,已被引用。
据我所知,这与函数参数要求的 MsoTriStrate 相同,那么为什么它不接受这个?尝试用 MsoTriState 值代替它的整数值(例如 -1 代表真)也不起作用。
使用 .NET Core 3.1 WinForms,Office 2019(包括 powerpoint)32 位,在 W10 x64 企业版和 Visual Studio 2019 上安装了 Office/Sharepoint 开发工具集。
看起来 tlbimp
在某个时候不正确地生成了互操作程序集。您可以在 \obj\Debug\netcoreapp3.1\Interop.Microsoft.Office.Interop.PowerPoint.dll
.
要正确重新生成它,您需要执行以下操作:
- 删除对“Microsoft PowerPoint 16.0 对象库”的引用。清理并重建项目。此时您也可以尝试卸载项目并手动删除
bin
和obj
文件夹。 - 添加对“Microsoft 15.0 对象库”和“Microsoft 16.0 对象库”的引用。
- 添加对“Microsoft PowerPoint 16.0 对象库”的反向引用,并再次清理并重建项目。
执行这些步骤后,我的 .NET Core 3.1 WinForms 项目编译成功。
在我的案例中,.csproj
文件的内容如下:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<COMReference Include="Microsoft.Office.Core">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>8</VersionMinor>
<VersionMajor>2</VersionMajor>
<Guid>2df8d04c-5bfa-101b-bde5-00aa0044de52</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Interop.PowerPoint">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>12</VersionMinor>
<VersionMajor>2</VersionMajor>
<Guid>91493440-5a91-11cf-8700-00aa0060263b</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>
</ItemGroup>
</Project>