调用单元格公式中Excel 2007中用C#编写的方法

我正在使用Excel 2007.我有C#代码写在一个单独的二进制文件。 该代码在类上使用静态类和静态方法。 我在VSTO Excel Worksheet项目中引用了DLL。 我需要添加或修改哪些内容才能使其工作?

我的C#代码如下所示:

using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

namespace FooStatistics
{
    [ComVisible(true)]
    public static class Statistics
    {
        public static int Count(Range range)
        {
            return range.Count;
        }

我希望能够将公式放入一个如下所示的Excel单元格中:

=FooStatistic.Statistic.Count(A1:A10)

管他呢。

我已经看到了这一点,但它似乎是在Excel 2003中的非静态类。我不相信现在整合不是更好。

我已经看了很多关于此的StackOverflow问题。 他们似乎没有提供本地集成(许多人说,“使用X开放源代码库”),不幸的是,很多不被OP接受。 我不是在寻找,“把它变成一个COM对象,并从VBA调用它。”

所以我在寻找:

  • Excel 2007
  • 代码在C#DLL中
  • 从Excel单元格调用UDF
  • 本地整合
  • 所以这里有另一个StackOverflow链接,其中两个响应者说:

  • 据我所知,你不能直接在VSTO中创建UDF。
  • VSTO不支持创建Excel UDF。 自动化插件可以在.Net中创建,并且似乎是微软批准的方式。
  • 这是2009年6月以来的一个问题。这是真的 - 在2009年,您必须将.NET组件公开为COM服务器才能获得可调用UDF的Excel?


    如果这些是你的四个要求 - (1)Excel 2007,(2)C#DLL代码,(3)从Excel单元调用UDF,(4)本地集成 - 那么,这是可以完成的,容易。 关于如何做到这一点的最佳教程之一是Eric Carter的文章在.NET中为Excel编写用户定义的函数。

    如果您另外希望您的代码通过VSTO托管,那么我几乎肯定您在这种情况下需要使用VBA包装。 请参阅Paul Stubbs的文章“如何在VSTO托管代码中创建Excel UDF”,其中他使用VBA加载项来公开VBA UDF,VBA UDF又将其称为使用VSTO编写的Managed UDF。

    说实话,对于Excel UDF,我只是避免使用VSTO。 VSTO是一个管理COM加载项的优秀设计器,允许您轻松添加Ribbon控件等。 但对UDFs没有帮助(事实上,甚至不支持它)。 因此,我的建议是根据Eric Carter的文章创建托管自动化插件,并放弃VSTO要求。

    如果你这样做,我保证你没有问题。 :-)

    麦克风


    我了解您对“原生”解决方案的渴望,而不是“使用X开源库”。 但即使VSTO对于Excel来说也不是很“原生”。

    您的要求正是我发现自动化加载项不充分之后,导致我开发ExcelDna(http://exceldna.codeplex.com)的原因。 在最近的Excel版本中,对自动化加载项的支持没有得到改进,而.xll加载项API(即ExcelDna使用)在最新版本中已经看到更新的支持,现在支持多线程重新计算,并且在Excel中使用异步调用2010。

    即使ExcelDna是您的解决方案中引入的额外部分,您也会对结果感到满意。 令人遗憾的是,微软在管理UDF插件方面还没有明确的方向,或者VSTO中对此有任何支持的迹象,但实际上使用ExcelDna做到这一点很简单,重量轻并且工作得很好。

    霍弗特


    @ hughdbrown:只需按照Erics文章中的示例。 如果你这样做,它会工作。 不,你不能使用静态类。 你用COM包装器创建一个.net类(注册它为com互操作)。

    链接地址: http://www.djcxy.com/p/67831.html

    上一篇: Call methods written in C# in Excel 2007 from cell formulas

    下一篇: Invalid column name, column accents in MS SQL Server