代码之家  ›  专栏  ›  技术社区  ›  Tim

Microsoft Office互操作程序集引用

  •  5
  • Tim  · 技术社区  · 17 年前

    我有一个在visualstudio2005中开发的应用程序,我正在使用ClickOnce部署它。我的解决方案包含两个项目—一个用VB编写的用户界面层和一个用C#编写的类库。我的C#类库有一些使用Outlook和Excel互操作程序集的代码(Microsoft.Office.Interop一、展望与展望Microsoft.Office.Interop.Excel,两个版本都是11)。这是我的问题。

    1. 虽然我还没有找到这是一个绝对的地方,我的理解是,您必须有适当版本的Office应用程序(Outlook/Excel),以便安装使用互操作程序集的应用程序。是这样吗?

    如果(1。=是)那么

    .dll文件 文件,那么是什么使它们与其他文件如此不同,以至于您不能只发布项目中的文件,而不管客户机上安装了什么软件,这些文件都能满足引用的要求呢?(很明显,我对GAC及其对visualstudio行为的影响了解不足。)我很乐意编写自己的代码来检查是否存在使用它们的少数功能所需的办公软件。没有办公室,没有功能。。。

    “无法安装或运行应用程序。应用程序要求首先在全局程序集缓存(GAC)中安装AssemblyOffice11.0.0.0版。

    请与系统管理员联系。“

    • 在我的研究中,我看到有些人的引用指向*C:\WINDOWS\assembly\GAC*,我的引用指向*C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11*,但我没有找到更改引用路径的方法。根据 http://msdn.microsoft.com/en-us/library/ez524kew(VS.80).aspx 你不能添加来自GAC的引用,那么其他人是如何管理它的呢?
    • 我已尝试将引用从*C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11*复制到我的项目目录并在那里引用它们。

    我想我需要知道的主要事情是如何/是否可以在我的出版物中包含这些程序集,并满足或绕过GAC的要求。

    如果可能,请尽量直接回答我的具体问题。虽然文章很有帮助,但我已经读了很多文章,尝试了很多建议的解决方案,但都没有成功。请记住,我缺乏对这一切如何开始运作的物流的理解。

    原谅我的不理解,谢谢你的帮助。非常感谢!

    5 回复  |  直到 17 年前
        1
  •  8
  •   Govert    15 年前

    您可能想看看NetOffice项目: http://netoffice.codeplex.com/ .

    它是一个免费的(MIT许可证)和完整的(所有2000-2010版本和所有Office应用程序)版本独立互操作程序集。程序集是使用工具从实际的pia生成的,因此它们是正确的、完整的和最新的,并且可能会在将来的版本中快速更新。

    另一个很好的特性是,每个成员的IntelliSense显示实现该成员的Office版本。

    对于部署,可以将程序集与应用程序一起复制或安装。

        2
  •  2
  •   Guy Starbuck    17 年前

    根据我的经验,在广泛的部署场景中尝试管理office互操作程序集是一场噩梦。如果您是通过ClickOnce进行部署的,即使您绕过了上面提到的GAC问题(如果这是公司环境,您的IT部门可能会推出互操作程序集的GAC注册),您将需要处理用户的Office版本与标准版本不同的情况——当Office13问世,用户开始升级,它破坏了您的应用程序时,上天会帮助您。

    为了避免使用版本绑定的互操作程序集,可以使用pinvoke直接对独立于版本的office COM包装器(它们从注册表中提取客户端上的当前office版本)执行office自动化。不过,这也有其自身的部署挑战(例如,您可能需要更新注册表以处理安装了pia的计算机,这在使用ClickOnce进行部署时可能非常具有挑战性),而且开发起来要困难得多。

        3
  •  1
  •   Joe Erickson    17 年前

    以下是我从经验中了解到的(我应该指出,我们没有使用ClickOnce,但我不确定这有什么关系):

    如果您编写Excel2003API并将其部署到带有Excel2007的计算机上,它将正常工作,因为Excel2007实际上模拟了Excel2003。问题是有些api已经改变了,它们的一些api甚至已经被删除了。你得自己试试看你的申请是否受到影响。

    事实上,比这更糟。如果在安装了Excel2003和Excel2007的计算机上运行应用程序,则Interop的使用仍将使用Excel2007。

    SpreadsheetGear for .NET

    你可以下载免费试用版 here 如果你想试试的话。

    免责声明:我拥有SpreadsheetGear LLC

        4
  •  1
  •   Siarhei Kuchuk    16 年前

    https://sourceforge.net/projects/exceldata/

    • 不同office版本的iterops和TLB没有Nightmare
    • 易于修改

    然而:

        5
  •  0
  •   Sarel Botha    15 年前

    使用C#时,如果使用反射API,会得到延迟绑定,但使用此API编写代码非常痛苦。在C#4中,还可以通过动态类型获得后期绑定。

    如果这样做,就不需要分发任何Office程序集,只要officeapi中对象的属性不变,代码就可以工作。