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

标签 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;
        }

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

=FooStatistic.Statistic.Count(A1:A10)

或者其他什么。

我看过 this但它似乎适用于 Excel 2003 中的非静态类。我无法相信集成现在没有更好。

我已经查看了很多关于此的 StackOverflow 问题。它们似乎不提供 native 集成(很多人说,“使用 X 开源库”),而且不幸的是,许多不被 OP 接受。我不是在寻找“将它变成 COM 对象并从 VBA 调用它。”

所以我在寻找:

  • Excel 2007
  • C# DLL 中的代码
  • 从 Excel 单元格作为 UDF 调用
  • 本地集成

所以这里是 another StackOverflow link ,其中两个响应者说:

  • 据我所知,您不能在 VSTO 中直接创建 UDF。
  • VSTO 不支持创建 Excel UDF。 Automation Add-Ins 可以在 .Net 中创建,并且似乎是 Microsoft 批准的执行方式。

这是 2009 年 6 月的一个问题。这是真的吗?在 2009 年,您必须将 .NET 组件公开为 COM 服务器才能获得 Excel 的可调用 UDF?

最佳答案

如果这些是您的四个要求 -- (1) Excel 2007,(2) C# DLL 中的代码,(3) 从 Excel 单元格作为 UDF 调用,(4) native 集成 -- 那么,是的,这可以完成,而且很容易。关于如何执行此操作的最佳教程之一是 Eric Carter 的文章 Writing user defined functions for Excel in .NET .

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

老实说,对于 Excel UDF,我会简单地避免使用 VSTO。 VSTO 是托管 COM 加载项的出色设计器,可让您轻松添加 Ribbon 控件等。但它对 UDF 毫无帮助(事实上,甚至不支持它)。所以我的建议是根据 Eric Carter's article 创建一个托管自动化插件。 ,并删除 VSTO 要求。

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

迈克

关于c# - 从单元格公式调用在 Excel 2007 中用 C# 编写的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308165/

相关文章:

c# - 无论如何需要 DBNull 做什么?

c# - 如何发现哪个测试单元检查了哪些代码行?

c# - 如何在工作簿中查找所有命名范围

c# - 如何查找单元格的命名范围 - VSTO 抛出异常

.net - 使用 VSTO for Visio 将图像添加到组织图表形状

c# - 如何使用逆变参数将泛型接口(interface)转换为基类型?

c# - 将 Excel 文件从 .csv 转换为 .xlsx

Excel 单元格文本未显示到下一个空白单元格中

java - 如何使用 Apache POI 和 Java 创建超链接?

c# - 检查焦点是否设置为excel单元格