如何从Visual Studio C#使用Office?

在Visual Studio中添加Office的COM互操作的引用的技术是:

  1. 参考
  2. 添加参考
  3. selectCOM选项卡
  4. select“ Microsoft Office 11.0对象库”

神奇的命名参考出现:

Microsoft.Office.Core 

Project.csproj文件显示引用的详细信息:

 <COMReference Include="Microsoft.Office.Core"> <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid> <VersionMajor>2</VersionMajor> <VersionMinor>3</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference> 

项目进入源代码控制,一切正常。


然后,使用Office 2007的开发人员将从源代码pipe理中获取该项目,并且无法构build它,因为此类引用不存在。

他(即我)检出.csproj文件,删除对的引用

 Microsoft Office 11.0 Object Library 

并重新添加COM引用

 Microsoft Office 12.0 Object Library 

而神奇的是一个命名参考出现:

 Microsoft.Office.Core 

Project.csproj文件显示引用的详细信息:

 <COMReference Include="Microsoft.Office.Core"> <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid> <VersionMajor>2</VersionMajor> <VersionMinor>4</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference> 

项目进入源代码控制,一切正常。


然后,使用Office 2003的开发人员从源代码​​pipe理中获取该项目,并且无法构build它,因为这样的引用不存在。

他(即不是我)检出.csproj文件,删除对的引用

 Microsoft Office 12.0 Object Library 

并重新添加COM引用

 Microsoft Office 11.0 Object Library 

而神奇的是一个命名参考出现:

 Microsoft.Office.Core 

Project.csproj文件显示引用的详细信息:

 <COMReference Include="Microsoft.Office.Core"> <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid> <VersionMajor>2</VersionMajor> <VersionMinor>3</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference> 

项目进入源代码控制,一切正常。

然后,该项目build成,压缩到CD上 ,并发送给拥有Office 2007的客户。

一切都不好。


在过去的日子里(即.NET dll地狱之前),我们将使用版本独立的ProgID引用Office对象,即:

 "Excel.Application" 

这解决了安装的办公室,例如

 {00024500-0000-0000-C000-000000000046} 

其中一个类是通过调用COM(语言 – 中间伪代码)构造的。

 public IUnknown CreateOleObject(string className) { IUnknown unk; Clsid classID = ProgIDToClassID(className); CoCreateInstance(classID, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IUnknown, out unk); return unk; } 

问题

1)什么是批准的技术来自动安装Office应用程序?

2)什么是Office 2003主互操作程序集有用?

3)如果我使用Office 2003主互操作程序集,是否必须安装Office 2003?

4)如果我使用Office 2003主互操作程序集创build,我的客户是否永远与Office 20003绑定?

5)是否有Office 2007主互操作程序集?

6)如果我安装Office 2007主互操作程序集,我必须安装Office 2007吗?

7)使用标准COM互操作来驱动Excel,Word或Outlook有什么问题? 例如:

 [ComImport] [Guid("00024500-0000-0000-C000-000000000046")] public class Excel { } 

8)当添加一个时,什么是实现

  • 参考 COM选项卡上的项目,
  • 与使用[ComImport]相反,
  • 而不是使用Office 2007主互操作程序集

9)是否使用与使用COM互操作相同的COM选项卡添加引用,除非需要types库才能看到它?

10)Office 2003主互操作程序集是否可以前后兼容: – Office 14 – Office 2007 – Office 2003 – Office XP – Office 2000 – Office 97 – Office 95

如果客户和开发人员安装了Office的新版本,它还能工作吗?

11)我们是否必须将Office 2003主互操作程序集与我们的应用程序一起发货?

12)客户是否必须先安装Office 2003主互操作程序集才能使用我们的应用程序?

13)如果客户安装Office 2003主互操作程序集,是否必须安装Office

14)如果客户安装Office 2003主互操作程序集,是否必须安装Office 2003

15)Office 2003小学互操作系统是否免费,精简版,可再发行版本的Office 2003?

16)如果我的开发机器有Office 2007,我可以使用Office 2003 PIA,并将其发送给安装了Office XP的客户?

哇,这是很多问题。 我认为,一般来说,如果你的应用程序正在使用PIA,那么你就假设你的目标受众已经安装了某个版本的Office。 当目标用户安装Office时,PIA将安装在GAC中。 如果他们没有安装Office,那么你为什么瞄准Office?

是的,Office dll是使Office自动运行的正确方法。 这里有一个程序集列表,其中包括Office 2007的一些列表。

答案是“复制本地”,无论你获得互操作的任何程序集。 一旦你有你的输出文件夹中的程序集DLL,添加一个引用,并检查到源代码pipe理。

现在每个人都有引用的程序集DLL。

你使用VSTO(Visual Studio工具为办公室)?

http://msdn.microsoft.com/en-us/office/aa905533.aspx

一个古老的线程,可能大多数人会满意CopyLocal = True,但是这里有另外一种方法。在你的项目文件中同时使用(或更多..思维的Office 2010,如果问题仍然存在..)引用,或者忽略或者告诉MSBuild忽略“MSB3284”警告(找不到库)。 所以把它包含在你的.csproj文件中:

 <COMReference Include="Microsoft.Office.Core"> <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid> <VersionMajor>2</VersionMajor> <VersionMinor>3</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference> 

其次是:

 <COMReference Include="Microsoft.Office.Core"> <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid> <VersionMajor>2</VersionMajor> <VersionMinor>4</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference> 

我有兴趣看看微软是否为此提供了一个NuGet库 – 只是为了让所有人都采用相同的方法。 我认为这将消除人们searchnetworking这些答案的必要性…我相信这将是对微软Office的许可证,所以他们是唯一的供应它。

顺便说一句,复制本地你必须小心不要错误地重新分配这些库。