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

hug*_*own 6 c# excel vsto user-defined-functions

我正在使用Excel 2007.我有一个单独的二进制文件编写的C#代码.代码在类上使用静态类和静态方法.我在VSTO Excel工作表项目中引用了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;
        }
Run Code Online (Sandbox Code Playgroud)

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

=FooStatistic.Statistic.Count(A1:A10)
Run Code Online (Sandbox Code Playgroud)

管他呢.

我已经看过这个,但它似乎是Excel 2003中的非静态类.我不相信整合现在还不是更好.

我已经看了很多关于StackOverflow的问题.它们似乎没有提供本机集成(很多人说,"使用X开源库"),并且不祥的是OP很多都不接受它们.我不是在寻找,"将它变成一个COM对象并从VBA调用它."

所以我在寻找:

  • Excel 2007
  • C#DLL中的代码
  • 从Excel单元格调用UDF
  • 原生整合

所以这是另一个StackOverflow链接,其中两个响应者说:

  • 据我所知,您无法在VSTO中直接创建UDF.
  • VSTO不支持创建Excel UDF.自动化加载项可以在.Net中创建,并且似乎是Microsoft批准的方式.

这是一个从2009年6月开始的问题.这是真的 - 在2009年你必须将你的.NET组件公开为COM服务器以获得可调用的Excel UDF吗?

Mik*_*lum 2

如果这些是您的四个要求 -- (1) Excel 2007、(2) C# DLL 中的代码、(3) 从 Excel 单元格作为 UDF 调用、(4) 本机集成 -- 那么,是的,这是可以完成的,而且非常好容易地。关于如何执行此操作的最佳教程之一是 Eric Carter 的文章在 .NET 中为 Excel 编写用户定义的函数

如果您还希望通过 VSTO 托管代码,那么我几乎可以肯定,在这种情况下您需要使用 VBA 包装器。请参阅 Paul Stubbs 的文章如何在 VSTO 托管代码中创建 Excel UDF,其中他使用 VBA 加载项公开 VBA UDF,后者又调用用 VSTO 编写的托管 UDF。

但说实话,对于 Excel UDF,我会避免使用 VSTO。VSTO 是托管 COM 加载项的出色设计器,允许您轻松添加功能区控件等。但它对 UDF 没有任何帮助(事实上,甚至不支持它)。因此,我的建议是按照Eric Carter 的文章创建一个托管自动化插件,并放弃 VSTO 要求。

如果你这样做,你不会有任何问题,我保证。:-)

麦克风