如何从Visual Studio C#中使用Office?

Ian*_*oyd 12 com excel interop ms-office visual-studio

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

  1. 参考
  2. 添加参考
  3. 选择COM选项卡
  4. 选择Microsoft Office 11.0对象库

神奇命名的参考出现:

Microsoft.Office.Core
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

并且项目被检查到源代码控制并且一切都很好.


然后,Office 2007的开发人员从源代码控制获取项目,并且无法构建它,因为此类引用不存在.

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

Microsoft Office 11.0 Object Library
Run Code Online (Sandbox Code Playgroud)

并重新添加COM引用

Microsoft Office 12.0 Object Library
Run Code Online (Sandbox Code Playgroud)

神奇地出现了一个命名参考:

Microsoft.Office.Core
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

并且项目被检查到源代码控制并且一切都很好.


然后,Office 2003的开发人员从源代码控制获取项目,并且无法构建它,因为这样的引用不存在.

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

Microsoft Office 12.0 Object Library
Run Code Online (Sandbox Code Playgroud)

并重新添加COM引用

Microsoft Office 11.0 Object Library
Run Code Online (Sandbox Code Playgroud)

神奇地出现了一个命名参考:

Microsoft.Office.Core
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

并且项目被检查到源代码控制并且一切都很好.

然后构建项目,压缩到CD上,并发送给拥有Office 2007的客户.

一切都不顺利.


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

"Excel.Application"
Run Code Online (Sandbox Code Playgroud)

解析为已安装的Office 的clsid,例如

{00024500-0000-0000-C000-000000000046}    
Run Code Online (Sandbox Code Playgroud)

然后使用对COM(language-netural伪代码)的调用构造一个类:

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;
}
Run Code Online (Sandbox Code Playgroud)

问题

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

2)Office 2003主互操作程序集有哪些用途?

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
{
}
Run Code Online (Sandbox Code Playgroud)

8)当一个人添加a时,实现什么?

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

9)使用COM选项卡添加引用是否与使用COM interop相同,只是它需要一个类型库才能看到它?

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 Primary Interop Assembles是Office 2003的免费,精简,可再发行版本吗?

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

Ian*_*oyd 2

答案是“复制本地”您为互操作获得的任何程序集 dll。将程序集 dll 放入输出文件夹后,添加对其的引用,并将其签入源代码管理。

现在大家都有引用的程序集dll了。