问题标签 [xll]

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.

0 投票
2 回答
512 浏览

c++ - 使用 excel sdk 用 c++ 编写的 Excel 函数:我希望它在 excel 的函数向导中使用时不会触发计算

我正在使用excel c/c++ sdk >= 2007(我把 2007 的链接作为参考)和 excel >= 2007。我(使用 sdk)编码了一个 xll,它提供了一个函数 F,这个函数 F 可以在excel表格中以两种方式调用:1)在excel单元格/单元格区域或公式栏中直接写入涉及F的公式2)在excel单元格中写入=F,然后单击公式左侧的fx图标栏并使用excel的功能向导

只有第二种情况让我感兴趣。在这种情况下,这将打开 excel 函数向导的对话框:一个具有 n 个单元格的窗口,每个单元格对应于 F 的一个参数(假设 F 是一个采用 n 个参数的函数)。现在,默认情况下,您是否在其中一个单元格中输入了一些内容,excel 会触发函数的重新计算。

当您不知道该函数并想要“发现它”时,这特别方便,因为您可以查看您键入的内容是否代表 F 等的正确参数,例如确实出现错误等。

但是如果 F 依赖于一个非常密集的数值例程(在 c++ 中),那么所有的重新计算都会花费很长时间,并且会冻结向导。(因为每次修改对话框中的单元格,都会触发重新计算。)

因此,我想做以下事情:通过函数向导“调用”函数时以某种方式停用重新计算。这就是低质量的解决方案。

理想情况下,我想做以下事情:自动触发重新计算,但确保(在 c++ excel sdk 代码中)它们是在调用向导的不同“线程”中完成的。这样就不会再结冰了。(以便可以保留向导的方便部分。)显然,如果我正确理解这篇 msdn 文章(也许不是,以防它不是同一个问题)在 excel 2007 下是不可能的,但它在 excel >= 2010 年。

由于 F 的用户正在使用各种版本的 excel - 主要是 2007 年,但其中一些甚至是 2003 年 - 即使我很想推到 2010 年(来吧,我们毕竟在现实生活中已经到了 2013 年! ),出于上述原因,我不会这样做,但也因为仅对某些 excel 版本有效的东西对我来说并不令人满意...

所以我想找到另一个解决方案。我听到人们为此谈论 RTD,但我不确定。

这就是为什么欢迎任何见解!提前很多。(对于问题的长度感到抱歉。)

0 投票
1 回答
893 浏览

c++ - 如何直接从 c++ dll 返回 XLOPER(Excel 变量)到 VBA?

我不知道如何在 VBA 中处理 XLOPER 类型变量。有很多网页解释了 Xloper 变量、c++ DLLXLL 插件之间的关系,但是我需要在没有 XLL 框架的情况下在一个将 xloper 直接返回到 VBA 的 dll 中编写 c++ 函数。(不需要用户定义函数,因为来自 dll 的函数将由 VBA 代码调用 - 而不是由 Excel 用户调用)。

事实上,我正在编写一个 Excel VSTO,我需要从中调用 c++ 代码。我发现 xloper 变量对 XLL 非常有用,所以我想直接在 VBA/VB.Net 中使用这个变量类型。那么有可能吗?

编辑 :

抱歉,如果我不清楚,例如,我让这个 c++ 函数从 excel 接收 Int 并返回相同的值加上 5 作为 xloper variale 到 excel。

但我不知道如何在 vba 中调用它,返回变量是 VARIANT 吗?

0 投票
1 回答
513 浏览

batch-file - 使用 bat 或 vbScript 打开 Excel 时注册和取消注册 XLL

我只是想知道是否有一种好方法可以编写一个简短的 .bat 脚本或 .vbscript 来执行以下操作:

  1. Excel 打开时,取消注册 xll。

  2. 从我指定的文件夹中抓取 xll 到部署文件夹,替换当前的 XLL

  3. 将新的 xll 注册为 Excel 插件。

我想要这样一个脚本的原因是因为每次编译代码时都会得到一个新的 xll,如果我手动保存所有打开的 Excel 工作簿、关闭 Excel 并在替换后重新打开 Excel,那将是一个巨大的麻烦文件。

我当前的设置是 Windows XP/7 上的 Excel 2010,具体取决于我使用的机器。

谢谢!

0 投票
1 回答
363 浏览

c++ - .xll 格式不同于文件扩展名指定的格式

我尝试在 VS2010(使用 C++)中创建一个非常简单的 .xll,其中包含一个简单的加法功能。

我使用 Visual Studio 中的 Project Properties 菜单包含了 xlcall32.lib 和 frmwrk32.lib(来自 2007 Excel SDK),并使用 .def 使用 xlAutoOpen 导出了函数,并且在 Dependency Walker 中打开 .xll 时没有显示错误,并且它显示要导出的 2 个函数。

有关信息,我正在使用 Win7 机器并尝试在 Excel 2007 中加载 .xll。

有人对可能导致这种情况的原因有任何想法吗?我还没有尝试使用 xll.codeplex.com,因为在我的公司中安装程序需要很长时间,我希望尽快启动并运行它。

谢谢。

0 投票
1 回答
998 浏览

excel-2010 - 制作在 32 位和 64 位 Excel 下运行的 XLL

我们正在使用 XLDNA 制作一个小的 VB.net XLL,它可以加载我们的数据文件并将内容放在 Excel 中进行编辑。当我们试图在我们的三人团队中部署它时,它就像是三个臭皮匠的一集——它可以在一台机器上正常工作,但然后告诉我们它在另一台机器上不是有效的 XLL,这会引起很多人头晕目眩。

我们意识到与 32/64 相关,但也发现有问题的机器随机拥有 32 或 64 版本的 Excel ,即使它们都是相同的型号,运行相同的操作系统,从同一张 DVD 安装 XL!如果我们无法弄清楚这一点,我怀疑我们的用户会遇到更难的情况。

那么...有没有办法制作一个同时包含 32 位和 64 位代码的 XLL?

0 投票
1 回答
98 浏览

c# - ExcelDna 获取 Excel UI 元素

我们如何从 DNA 文件中检索 UI 元素,因为我似乎无法访问在 DNA 文件中创建的 UI 元素?我正在使用 Excel-Dna

还 :

我想做的是对于给定的单元格,我想获取下一个 N 单元格的值,但是每当我得到单元格的值时,我都会收到一条错误消息 0x800A03EC。如何获得与当前单元格不同的值?

0 投票
1 回答
317 浏览

excel - xlfEvaluate 的 XLL 问题

我使用 VS2012 用 XLL 编写的一个非常简单的函数遇到了这个问题。我曾尝试阅读 MSDN 和 Steve Dalton 的书,但我看不出我做错了什么。棘手的一点是,我需要我的函数来读取工作表单元格中的值,而不是从中调用它的单元格。该函数不接受任何参数,并返回一个整数。我已将其声明为 J#(# 表示它可以按照 Dalton 的建议调用 XLM 功能......尽管没有 # 我仍然遇到同样的问题)。我没有包括我的函数声明以节省空间,但它很简单,我认为这不是问题的原因。

第一个代码块工作正常。我写它只是为了建立信心。

但是这第二个块不起作用。我不明白为什么。我正在尝试从一个单元格中读取一个值,该单元格与调用函数的单元格不同。我得到的是返回 XLOPER12,其中包含错误 (xltypeErr) 和 val.num 字段中的垃圾值(工作表单元格确实包含整数值)。

你能解释一下出了什么问题吗?

0 投票
1 回答
1810 浏览

python - 调用xll函数python

您好我正在尝试通过python调用xll插件的函数。我已经加载了插件并且一切运行良好,直到我需要调用一个函数,其中我的参数是可选的,因此我可以将其留空,然后我得到一个错误。即:在excel中,function1如果我输入一个单元格,效果很好

但是如果在python中我写:

以下行不起作用:

有人对这种情况有解决方案吗?

0 投票
1 回答
821 浏览

c# - 为什么我的 XLL 比我的 UDF 慢?

我一直在尝试通过使用 XLL 来加速宏,但是,使用 UDF 似乎比使用 XLL 快得多。

一些带有代码分析的数据证明了这一点

子 Proc 的XLL时间:模块 1 迭代11.64831 秒

子 Proc 的UDF时间:模块 1 迭代4.25986 秒

它发生在我转换的两个 UDF 上,因子大约慢 2 倍或 3 倍。例如,为此的 XLL 函数是:

UDF 函数是

两者都针对 Range(A1:A701) 进行了测试,单元格之间有数据和空白,两者都按预期工作,只是 XLL 速度较慢。

0 投票
1 回答
60 浏览

c++ - 附加相同的插件,但从 Excel 上的不同文件夹启动

我有一个用 C++ 编写的 Excel 插件 XLL,比如说它叫做 abc.xll。

我想做的是编写一个小批处理脚本,这样当我调用它以“Prod”参数启动时,它将在 C:\xllProduction\abc.xll 文件夹中启动带有 xll 插件的 Excel,当我开始时它带有“Dev”参数,它将在 C:\xllDev\abc.xll 文件夹中启动 Excel xll。

我知道我可以在 .bat 文件中使用 set local 来强制环境变量仅对特定会话有效,并且我可以使用 start excel 来启动 Excel,但我不知道如何从特定的 xll 开始。

如果有帮助,我正在使用 Excel 2010。

谢谢!