【发布时间】:2010-09-28 22:25:57
【问题描述】:
在 Visual Studio 中添加对 Office 的 COM 互操作的引用的技术是:
- 参考文献
- 添加参考
- 选择COM标签
- 选择 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 的开发人员从源代码管理中获取项目,但无法构建它,因为这样的引用不存在。
他(即我)签出 .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 的开发人员从源代码管理中获取项目,但无法构建它,因为这样的引用不存在。
他(即不是我)签出 .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>
并且项目被签入源代码管理,一切都很好。
然后构建项目,将其压到 CD 上,然后发送给拥有 Office 2007 的客户。
一切都不好。
在过去(即 .NET dll 地狱之前),我们会使用 版本独立的 ProgID 来引用 Office 对象,即:
"Excel.Application"
解析为已安装 Office 的 clsid,例如
{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 Primary Interop Assemblies 有什么用处?
3) 如果我使用 Office 2003 主互操作程序集,是否必须安装 Office 2003?
4) 如果我使用 Office 2003 主要互操作程序集进行构建,我的客户会永远与 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 interop 相同,不同之处在于它需要 类型库 才能看到了吗?
10) Office 2003 主互操作程序集是否向后和向前兼容: - 办公室 14 - 办公室 2007 - 办公室 2003 - 办公室 XP - 办公室 2000 - 办公室 97 - 办公室 95
如果客户和开发人员安装了新版本的 Office,它还能正常工作吗?
11) 我们是否必须将 Office 2003 主要互操作程序集与我们的应用程序一起提供?
12) 客户是否必须先安装 Office 2003 主互操作程序集才能使用我们的应用程序?
13) 如果客户安装 Office 2003 主要互操作程序集,他们是否必须安装 Office?
14) 如果客户安装 Office 2003 主要互操作程序集,他们是否必须安装 Office 2003?
15) Office 2003 Primary Interop Assembles 是 Office 2003 的免费、精简、可再分发版本吗?
16) 如果我的开发机器安装了 Office 2007,我是否可以使用 Office 2003 PIA,并交付给安装了 Office XP 的客户?
【问题讨论】:
-
抱歉,无法投票,票数已满。但这当然是值得的。
标签: visual-studio excel com interop ms-office