3

我正在开发一个与 COM 对象通信的 Excel 插件 (XLL)。所以,我必须在 XLOPER 和 VARIANT 之间进行编组。我已经完成了大部分工作,但数组绝对是一种痛苦。我需要支持一维和二维数组。

我想有人以前已经不得不处理这个问题了。简化处理 VARIANT、SAFEARRAY 和 XLOPER(以及 XLOPER12)的最佳方法是什么?

4

2 回答 2

3

我不得不为此手动滚动我自己的编组代码。没有免费可用的库来处理这个问题。XLW 是用来包装你的整个插件的——这不是我的选择。

最后,只花了很多时间,查看 xloper 和变体的文档,并弄清楚如何将它们相互映射。

对于好奇:

xloper(12) 中的数组:

  • .xltype 是 xltypeMulti
  • .val.array 是指向 xlopers 数组的指针。

变体中的数组:

  • .vt 是 VT_ARRAY | VT_VARIANT
  • .parray 是变体的 SafeArray

此编组的其他提示:

  • xltypeRef 和 xltypeSRef:使用 xlCoerce 来查找实际的单元格值。
  • 整数值有溢出的风险。 boost::numeric_cast对此有帮助。
  • 字符串编组很烦人。xloper 使用 char,xloper12 使用 wchar,variant 使用 bstr。
  • 请记住释放为新的 xloper 字符串分配的缓冲区。相应地使用 xlbitDLLFree 和 xlAutoFree(12)。
  • 模板编程对于 xloper/xloper12 问题很有用。升压有帮助。_bstr_t 也有帮助。
于 2011-02-23T22:47:22.137 回答
0

我使用 XLL Plus(费用) http://www.as-ltd.co.uk/xllplus/default.htm

还有 XLW(开源) http://xlw.sourceforge.net/

可能还有我不知道的其他人

于 2010-12-23T08:47:46.697 回答