3-1*_*264 7 c# excel outlook office-interop visual-studio
我正在尝试在C#.NET 4.6.1 WPF项目中添加对"Microsoft Outlook 16.0对象库"的引用,因为我已经安装了Office 2016.以前版本的对象库与2016版本的办公室不兼容.
如果我使用Excel的VBA编辑器,则会列出"Microsoft Outlook 16.0对象库"并存在C:\Program Files\WindowsApps\Microsoft.Office.Desktop_16010.9126.2116.0_x86_8wekyb3d8bbwe\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSOUTL.OLB,如下所示:
但是,当我使用Visual Studio时,COM选项卡不会列出"Microsoft Office 16.0对象库",当我尝试浏览时C:\Program Files\WindowsApps,我得到"您目前没有权限访问此文件夹",然后单击"继续"(获取访问权限导致"您被拒绝访问此文件夹的权限".
基本上,Office 2016 dll似乎隐藏在人,狗和本地管理员无法访问的文件夹中.
我要做的就是连接到打开的Outlook应用程序,然后发送带有附件的电子邮件,所以或许还有一个问题是,是否有一些新的方式与Outlook 2016进行通信而未出现我的Googleathon?
另外值得注意的是,我的办公室版本是作为"Windows应用商店应用程序"安装的,因此没有出现在通常的"添加/删除程序"列表中,因此我找不到任何"修复"选项进行安装.
谢谢.
进一步调查显示我正在做正确的事情 - 尝试添加COM引用到'Microsoft Outlook 16.0对象库'现在是目标Outlook的正确方法... /sf/answers/1471289291/.
我检查了GAC,并且没有注册程序集.我已经通过"应用和功能"右键单击开始菜单选项进行了修复,但它们仍然没有出现 - 就好像Windows应用商店应用只是将他们的dll推入Program Files\WindowsApps\*文件夹,并且不打扰注册他们在GAC.
在回答非常感谢的评论!
使用以下代码
Outlook.Application application = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
Run Code Online (Sandbox Code Playgroud)
如果我使用nuget Microsoft.Office.Interop.Outlook包,我会得到一个System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'例外.
如果我尝试通过"添加引用"的"程序集/扩展"选项卡使用Microsoft Outlook 15.0 Object Library或Microsoft Outlook 14.0 Object Library引用,则会出现System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'异常.
我不认为访问WindowsApps文件夹是要走的路.首先,由于某种原因它被锁定,这通常表明如果我开始挖掘并改变安全权限可能会出现问题,更不用说在我的解决方案中维护最新dll的副本无疑会给我的项目增加不必要的复杂性.
其次,但更重要的是,如果我安装了办公室,并且我可以从Excel Vba访问"Microsoft Outlook 16.0对象库",那为什么我不能从Visual Studio访问它?
显然安装没有正确注册dll存在一些问题,只有Excel有一些技巧可用于使引用可用.
有没有人阅读过此设法安装Office 365/2016 Windows应用商店并在Visual Studio中找到对"Microsoft Outlook 16.0对象库"的引用?
我是唯一有这个问题的人吗?!因为它会影响我办公室中运行Windows 10和Office 365的多台计算机...
在回答RogerN(谢谢)时,请看下面的图片 - 我没有列出Microsoft.Office.Interop.Outlook版本16,也没有列出Microsoft.Office.Core.
如果我尝试使用v15库,我会收到以下错误:
System.Runtime.InteropServices.COMException
HResult=0x80040154
Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Source=mscorlib
*和答案是*
我从戴尔购买的两台计算机是64位,但它们预装了32位Windows应用商店版本的MS Office 2016/365.
为了解决这个问题,我不得不:
Settings > Apps > Apps&Features > Microsoft Office Desktop Apps > Uninstall戴尔认为我们想要在64位计算机上安装32位版本,或者为什么微软公司没有发布解决这个问题的解决方案的原因超出了我的理解,但是RogerN是正确的.感谢大家抽出时间帮助我.
详细阐述我之前的评论:根据您的描述,听起来您已经在 64 位计算机上安装了 32 位版本的 Microsoft Office。只有 32 位 COM 对象会被注册,因此 64 位 .NET 应用程序将无法找到它们。如果您搜索注册表,您应该会发现 0006F03A-0000-0000-C000-000000000046 类 ID 仅在 Wow6432Node 下注册。
要解决此问题,您可以安装 64 位版本的 Office 或强制 .NET 应用程序面向 x86 平台。
| 归档时间: |
|
| 查看次数: |
5939 次 |
| 最近记录: |