对于长度超过255个字符的公式,使用Excel-DNA arrayresize样本

本文关键字:使用 Excel-DNA 样本 arrayresize 于长度 255个 字符 | 更新日期: 2023-09-27 17:50:56

我在excel - dna的帮助下开发了一个excel插件,并面临着一个超过255个字符的公式问题。我从不同的行情器的API拉数据,一切都很好,直到数组调整器被调用。在DoResize()函数中,在下一行代码中抛出异常。

//Set the formula into the whole target
formulaR1C1 = (string) XlCall.Excel(XlCall.xlfFormulaConvert, formula, true, false, ExcelMissing.Value, firstCell);

异常描述如下:

Exception Type: System.InvalidCastException
Exception Message: Unable to cast object of type 'ExcelDna.Integration.ExcelError' to type 'System.String'.

我使用Excel 2013 32位与Excel- dna 0.30.

对于长度超过255个字符的公式,使用Excel-DNA arrayresize样本

该错误可能是由于在实现Excel- dna ArrayResizer示例中使用的Excel C API调用的限制。从历史上看,Excel C API中的字符串限制为255个字符。在Excel 2007中,这个限制被删除了(引入了最多64000个字符的Unicode字符串)。然而,许多C API函数还没有更新,仍然只支持255个字符串。xlfFormulaConvert函数似乎就是这样一个例子。

如果是这样,除了将整个ArrayResizer helper转换为使用COM Automation接口而不是C API之外,没有太多要做的事情。

您可以使用Excel定义的名称来缩短公式,通过定义子公式的名称,或者您可以引用工作表中计算子部分的其他单元格。

更新:使用COM接口(http://support.microsoft.com/kb/213181)设置Range.FormulaArray时存在相同的限制。有关广泛的讨论和解决方法,请参阅http://dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/。