我正在Excel-DNA的帮助下开发一个excel加载项,并且遇到了一个超过255个字符的公式的问题。我从不同代码的API中提取数据,一切都很好,直到调用Array Resizer。在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。
答案 0 :(得分:0)
该错误可能是由于在Excel-DNA ArrayResizer示例的实现中使用的Excel C API调用的限制。从历史上看,Excel C API中的字符串限制为255个字符。在Excel 2007中,此限制已被删除(引入了最多64000个字符的Unicode字符串。)但是,许多C API函数尚未更新,并且仍然只支持255个字符串。 xlfFormulaConvert
函数似乎就是这种情况。
如果是这样,除了转换整个ArrayResizer帮助程序以使用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/。