如何使用 C# 创建包装 RTD 函数的 Excel 自动化插件?

2024-03-07

我有一个基于 RtdServer 的可用自动化插件:
如何使用 RtdServer 在 C# 中创建实时 Excel 自动化插件? https://stackoverflow.com/questions/5397607/howto-create-a-real-time-excel-automation-add-in-in-c-using-rtdserver.

创建 VBA 包装器很简单:

Function RtdWrapper(start)
    RtdWrapper = Excel.Application.WorksheetFunction.RTD("StackOverflow.RtdServer.ProgId", "", start)
End Function

这有效。我尝试创建一个 C# 包装器,如下所示:

[ClassInterface(ClassInterfaceType.AutoDual)]
public class RtdWrappers
{
    private readonly Microsoft.Office.Interop.Excel.Application _application = new Application();

    public object Countdown(object startingCount)
    {
        var start = Convert.ToInt32(startingCount.ToString());
        return _application.WorksheetFunction.RTD("StackOverflow.RtdServer.ProgId", string.Empty, start);
    }

    [ComRegisterFunctionAttribute]
    public static void RegisterFunction(Type t)
    {
        Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable");
    }

    [ComUnregisterFunctionAttribute]
    public static void UnregisterFunction(Type t)
    {
        Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey("CLSID\\{" + t.GUID.ToString().ToUpper() + "}\\Programmable");
    }
}

当我在 Excel 的单元格中输入“=Countdown(150)”时,它显示初始值 150,该值由 ConnectData 返回但从未更新。我应该注册一些回调吗?我是否正确实例化了应用程序对象?我缺少什么?

Thanks,

Frank


事实上,您没有获得正确的 Application 对象。一种解决方案是实施IDTE扩展性2 http://msdn.microsoft.com/en-us/library/extensibility.idtextensibility2%28v=VS.100%29.aspx您的加载项中的界面。此接口有一个 OnConnection 方法,Excel 在加载加载项时将调用该方法。在此方法中,您将传递 Application 对象,您可以将其保存在局部变量中以供以后使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C# 创建包装 RTD 函数的 Excel 自动化插件? 的相关文章

随机推荐

  • 实体框架 6 无法识别 AddSqlServer()

    我正在尝试将 EF6 与 VS2015 CTP 和 ASP NET MVC 6 一起使用 它无法识别下面提到的代码startup cs这是我在使用 EF7 时添加的 public void ConfigureServices IServic
  • 请确保您的 Service Worker 文件包含以下内容:/(const precacheManifest =)\[\](;)/

    我对 React Workbox 还很陌生 我试图让我的 Electron React 应用程序能够缓存所有图像和数据 以便在离线时可用 这正是我在 YouTube 视频中想要实现的目标 14 00 到 21 00 分钟 使用 React
  • Ruby on Rails:无法在生产中注销应用程序

    我在 Heroku 上部署了一个应用程序 除了注销之外 一切正常 当我单击链接退出时 出现以下错误 您要查找的页面不存在 您可能输入了错误的地址 或者页面可能已移动 如果您是应用程序所有者 请检查日志以获取更多信息 对于用户身份验证 我当然
  • 可以容纳 64 位大小整数的完美数字幂(使用优先级队列)

    我们怎样才能打印出所有可以表示为 64 位长整数的完美幂 4 8 9 16 25 27 完美幂是一个可以写为 ab 的数字 对于整数 a并且b 2 这不是作业问题 我在算法设计书的求职面试问题部分找到了它 提示 本章是基于优先级队列的 我的
  • 使用 onbeforeunload 事件,“离开页面”时 url 发生变化

    我有一个要求 当用户付款并到达成功页面并返回时 应该将其重定向到自定义页面 因此 如果我单击浏览器后退按钮 它将显示两个选项 离开页面和留在此页面 当我单击离开页面时 它应该重定向到我的自定义页面 我发现以下链接很有用 但不适用于 离开页面
  • 将枚举值绑定到标签 XAML

    我正在使用枚举字段来跟踪程序的状态 public enum StatiMacchina InAvvio 1 Pronta 2 InLavorazione 3 InMovimento 4 InAttesa 5 InErrore 6 我想绑定跟
  • 中心引导行和跨度

    我正在尝试使用引导程序将行及其内部的跨度居中 您可以在页脚中看到它 http www divisionforty com wall http www divisionforty com wall 我希望社交网络图标位于左侧 版权位于中间 由
  • MVC 6 OpenIdConnect

    目前 我在将 MVC 应用程序从 beta 3 迁移到 4 时遇到了多个问题 其中之一与 OpenIdConnect 到 Windows Azure 进行身份验证有关 当我转到具有授权属性的页面时 该页面会停止处理并位于空白页面 而不会显示
  • 我无法以编程方式检测 angularjs 中的值变化

    我是 angularjs 的新手 我遇到了麻烦 I have html像这样 section class content div div section
  • DTO 道 POCO BO

    事实上 我对这些术语以及它们之间的关系感到非常困惑 我读过有关其中每个人的一些内容 但我不了解工作流程 DTO 数据传输对象 传输值的对象BO 业务对象 域模型中的对象 用于制作业务逻辑的对象POCO 不知道 我在维基上读过定义 但什么也没
  • Vue-i18n - 无法读取未定义的属性“配置”

    首先 我向您展示什么是有效的 在 App js 中 import router from routes js import VueI18n from vue i18n const messages en message hello hell
  • PHP静态成员不保值

    大家好 我正在编写的 WordPress 插件遇到了一个奇怪的问题 但这与 WordPress 本身无关 更多地与 PHP 有关 所以请继续阅读 以便我可以解释 WordPress 插件已连接 以便调用 init 函数 这有效 我可以确认它
  • iOS 模拟器中屏幕内容仅显示在部分屏幕上

    我的 iOS 模拟器仅将内容显示为屏幕的一部分 我该如何修复它 我正在使用 XCode 6 3 1 谢谢 你只需要重新启动它 有时会发生这种情况 强制关闭模拟器并重新启动
  • Django 中的syncdb 时内容类型过时

    当我努力的时候syncdb对于我的 django 项目 我看到以下抱怨 The following content types are stale and need to be deleted myapp Any objects relat
  • 在Java中调用Python?

    我想知道是否可以使用 Jython 从 Java 代码调用 Python 函数 还是只能从 Python 调用 Java 代码 Jython 用于 Java 平台的 Python http www jython org index html
  • Docker 注册表镜像未使用

    当我尝试从本地镜像中提取图像时 它起作用了 docker login u docker p mypassword nexus3 pleiade mycomp fr 5000 docker pull nexus3 pleiade mycomp
  • 数字签名服务器上的私钥存储在哪里?

    我正在开发一个客户端服务器应用程序 需要在发送到客户端之前使用私钥对某些文件进行签名 然后 客户端将使用公钥验证签名 因此 私钥需要始终位于服务器上并且可由服务器应用程序读取 问题是我想知道在哪里存储我的私钥 这样在服务器受到威胁时更安全
  • 为什么 sizeWithFont:constrainedToSize:lineBreakMode: 返回错误的大小?

    我想要在表格单元格的标签中显示的字符串有两种可能的宽度 并且我需要计算高度 以便正确记录表格单元格的高度 然而 无论我对约束尺寸做什么 我都会得到相同的高度 这在我想要的情况下是不正确的 我正在使用的代码 CGFloat width 300
  • 如何使用prepareForReuse方法

    我发现这个方法叫做 void prepareForReuse I 阅读文档 https developer apple com documentation uikit uitableviewcell但我不明白如何使用它 当我滚动表格视图时
  • 如何使用 C# 创建包装 RTD 函数的 Excel 自动化插件?

    我有一个基于 RtdServer 的可用自动化插件 如何使用 RtdServer 在 C 中创建实时 Excel 自动化插件 https stackoverflow com questions 5397607 howto create a