如何从Visual Studio C#使用Office?
在Visual Studio中添加Office的COM互操作的引用的技术是:
- 参考
- 添加参考
- selectCOM选项卡
- 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工具为办公室)?
一个古老的线程,可能大多数人会满意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的许可证,所以他们是唯一的供应它。
顺便说一句,复制本地你必须小心不要错误地重新分配这些库。