问题标签 [excel-dna]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vba - 如何从 .XLL 获取程序集版本(当 DLL 转换为 XLL 时)
我使用 ExcelDna 将 dll(VB.NET 项目的)转换为 xll。xll 中是否带有程序集版本?如果没有..我如何对 .xll 文件进行版本控制?一旦我这样做了,我必须在 VBA 代码中以编程方式获取程序集版本。非常感谢帮助!
excel-dna - 如何使用 ExcelDNA 选择单元格?
我想将焦点强制到一个特定的单元格上,我通过 XlCall.Excel(XlCall.xlfCaller) 有一个参考。我知道如何在 VSTO 中做到这一点,但是有没有办法用 ExcelDNA 做到这一点?
c# - Excel DNA - 参数适用于电子表格,但不适用于 vba
这对我来说有点奇怪。
我有以下代码:
如果我从这样的电子表格中提供我的论点,这将非常有效:
其中 [test] 是我的工作簿中的一个范围,其中包含有效的查询,看起来像这样:
attach database 'a.db' as d1
select * from d1.main
现在,如果我在 vba 中执行以下操作
这不起作用。我收到“类型不匹配”错误。任何输入为什么会是一个巨大的帮助,这让我发疯!
c# - 如何将处理程序添加到 Excel 使用 ExcelDNA 计算事件
我希望能够从我的 ExcelDNA 插件中收听 Excel 中所有工作表的 BeginCalculate 和 EndCalculate 事件,并执行一些初始化代码。有没有办法做到这一点?
c# - Excel-DNA 中指定的 .chm 文件无法在 Excel 中打开
我正在使用以下属性(如此处所述)尝试在 excel 中显示我的 UDF 的帮助文件:
不幸的是,当我单击“有关此功能的帮助”链接时,什么也没有发生。如果我使引用无效,如下所示:
我从 Excel 中收到一个弹出窗口,提示“帮助引用无效”,如果我删除标签,我会收到一个弹出窗口,提示“没有可用的帮助”,所以我知道这个属性被正确读取。
我的帮助文件与我的 .xll 文件位于同一目录中,并且我在 Windows 7 机器上使用 MS Office 2010(64 位)。插件中的其余功能正常工作。任何人都可以帮我找到导致此问题的 id 吗?
另外,出于好奇,有人知道帮助文件名后面的“!102”是什么意思吗?
c# - 修改嵌入在类库中的文件然后保存文件
我已经研究了几个星期,并且很难找到解决方案,我希望通过在这里发布一个一般性的问题来获得一些见解。
我有一个已将资源嵌入到(.xlsm)中的类库(在本例中为 .xll)。您可能知道也可能不知道,.xll 与 Excel 相关联,因此当有人打开 .xll 时,它会加载到 Excel 实例中。在我的场景中,当 .xll 加载到 Excel 中时,.xll 会加载嵌入的 .xlsm 的副本。到目前为止,一切都很好。这使我可以向我工作场所的最终用户发送一些东西,无论出于何种意图和目的,它都只是一个奇怪的 Excel 文件。
当用户希望能够保存他们对 Excel 工作表所做的更改时,就会出现问题。如果他们将其保存到桌面(使用 Excel 内置的保存功能),那么保存的只是 .xlsm。再次打开该 .xlsm 时,将不再加载 .xll,并且 .xlsm 中包含的任何 .NET 功能都将不起作用。
此时可能会出现几个问题。首先,为什么不直接向系统注册 .xll 呢?主要是因为如果我注册了 .xll,那么每次有人打开 Excel 时,都会打开 .xll,这意味着我嵌入的 .xlsm 也会打开(请记住,这就是 .xll 在启动时所做的事情。)用户往往会觉得这很烦人... :-)。
接下来,为什么不同时发送两个文件呢?回答:对最终用户的干扰太大(请耐心等待)。爱它或恨它,他们想要一个文件打开然后修改。对他们来说,.xll 只是 .xlsm 的另一个版本,我希望他们保留这种看法,因为这样可以更容易地解释自己。
最后,为什么不将 .xll 作为一个整体分发给我的团队并针对它发布 .xlsms 呢?回答:这些 .xll 将被发送到一大堆随机的地方,我无法控制用户在他们的机器上将拥有什么,所以我更喜欢保持独立。
我想到了两个基本的解决方案。
选项一是弄清楚如何简单地从 .xlsm 重新编译 .xll(可能通过 .xll 的实例),然后将该 .xll 保存到用户选择的位置。这将需要我创建自己的保存方法,因为 Excel 对此无济于事,并且可能包括我需要拦截用户在保存时所做的任何努力,以便我可以将它们重定向到我自己的保存方法。问题是我不知道如何让 .xll 自行重新编译,特别是因为我将把 .xll 发送到不一定有 SDK 的机器上。最重要的是,强迫用户使用我自己的保存方法将是另一个不受欢迎的中断(至少在我看来......)
选项二是创建一个作为可执行文件工作的程序集。基本上它会包含 .xlsm 和 .xll,并且可执行文件会加载 Excel,然后将 .xll 应用到它。只要可执行文件不需要管理员权限,我想我可以将它们发送出去代替常规的旧文件(这里的大多数人甚至从来没有看到扩展名,带有正确的图标,大多数人不能分辨其中的不同之处)。唯一的问题是我无法弄清楚如何在不使用资源文件并将 .xlsm 转换为字节码的情况下将 .xlsm 链接到程序集。这基本上让我们回到了第一方。
本质上,选项 1 要求我弄清楚如何在外国机器上编译,而选项 2 要求我弄清楚如何包含整个 .xlsm 以便我可以修改它并将其放回原来的位置……或者至少把它放在可执行文件可以很容易地再次找到它的地方。
无论如何,如果你做到了这一步,我将永远感激你。我只是想弄清楚下一步该往哪里看,并希望有人能指出我正确的方向。
提前致谢。
c# - 如何使用 Excel Dna 设置单元格的值?
我的 Excel DNA 插件中有以下代码
在我的 AutoOpen 方法中,我输入了以下代码:
我有以下从我的 excel 表中调用的函数。
问题是我实际上无法设置任何单元格值。当我调用该方法时,它会在最后一行导致错误。
我的错误处理程序给了我以下错误:
我也尝试像这样设置单元格值:
结果相同。
谁能指出我在这里可能做错了什么?
excel-dna - 无法更改 Excel 功能区上的标签
我在尝试使用 Excel-DNA 使用功能区设置自定义标签时遇到问题。
如果我没有包含注释“getLabel='GetLabel'”,那么插件加载正常。即功能区选项卡显示有 2 个按钮,按钮回调工作正常。
如果我确实包含属性“getLabel='GetLabel'”,则插件甚至不会加载,即不会调用 onLoad,并且功能区选项卡不会显示在 excel 中。
谁能看到我在这里做错了什么。在调试器中运行时我没有看到任何错误。
这是我的 DNA 文件。我试图以其中一个样本为基础,以便更容易理解。
这是我的 Ribbon 派生的 C# 文件。
c# - 使用 excel 插件防止单个对象的多个实例
我有两项可以插入 excel 的技术。
一种是实现 IDTExtensibility2 接口的 COM 插件。另一个是通过 Excel-DNA 实现的 RTD 服务器。
这两个对象都是由 excel 实例化的。他们每个人都需要在运行时访问第三个对象以从中获取数据并将其推送到 excel。
因为我不能把这个对象交给 excel 插件,所以我把它做成了一个单例,希望它们每个都可以共享同一个实例。
不幸的是,在运行代码时,他们每个人都看不到另一个人创建的单例对象的实例。
如何让两个插件引用同一个对象?
让我们假设两个插件都需要保留,我宁愿不进行进程间通信设置。
TL/DR 两个 excel 插件需要共享第三个对象,但是将第三个对象设为单例不起作用,因为每个 excel 插件都看不到另一个插件创建的第三个对象的实例。
这种问题的解决方案是什么?
excel - 如何以编程方式删除 Excel UDF
我有一个旧的 Excel 插件(用 VBA 编写),现在我使用 .NET、ExcelDNA、NetOffice 重新编写了旧的插件。在旧插件中,有一个 UDF,比如说,OldUDF,在新插件中,有一个 NewUDF,两个 UDF 做同样的事情并接受相同的参数。但它们有不同的函数名称。由于遗留原因,一些客户端有旧插件,一些客户端有新插件。有些客户两者都有。当他们安装了两个 Excel 插件时,我想提供一个复选框,在新插件中将 oldUDF 转发到 newUDF。选中该复选框时,oldUDF 将作为 newUDF 转发。不勾选复选框时,oldUDF 不会被转发。我在新插件中定义了 oldUDF 和 newUDF,但不知道在未选中复选框时如何删除 oldUDF 的定义。谢谢
编辑:
这是我尝试过的,但它不起作用。
在 AutoOpen() 中,我将从文件中读取转发值(真或假),如果转发为真,
但我得到一个编译错误
再次编辑:我成功注册我将OldUDF的声明放在一个单独的dll中,比如oldUDF.dll创建另一个oldUDF.xll,oldUDF.dna。
在 AutoOpen 中,我将检查转发值(来自文件)是否为真,我将执行 Excel.Application.RegisterXLL("olderUDF.xll"); 这工作正常。
但是,如果前向值为 false,我找不到在 C# 中取消注册或删除 XLL 的方法吗?
编辑:我找到了http://msdn.microsoft.com/en-us/library/office/bb687866.aspx,但不知道如何在 C# 中使用它
谢谢