C# 对长度超过255个字符的公式使用Excel DNA ArrayResizer示例

C# 对长度超过255个字符的公式使用Excel DNA ArrayResizer示例,c#,excel,excel-dna,C#,Excel,Excel Dna,我正在开发一个excel外接程序,借助excel DNA,并面临公式超过255个字符的问题。我从不同代码的API中提取数据,在调用数组大小调整器之前一切都很好。在DoResize()函数中,在下面的代码行抛出异常 //Set the formula into the whole target formulaR1C1 = (string) XlCall.Excel(XlCall.xlfFormulaConvert, formula, true, false, ExcelMissing.Value,

我正在开发一个excel外接程序,借助excel DNA,并面临公式超过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一起使用。

此错误可能是由于在ArrayResizer示例的实现中使用的Excel C API调用受到限制。过去,Excel C API中的字符串限制为255个字符。在Excel2007中,这一限制被删除(引入了多达64000个字符的Unicode字符串)。但是,许多C API函数尚未更新,仍然只支持255个字符的字符串。
xlfFormulaConvert
函数似乎就是这样一种情况

如果是这样的话,除了将整个ArrayResizer助手转换为使用COM自动化接口而不是C API之外,没有什么可做的

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


更新:使用COM接口()设置
Range.FormulaArray
时存在相同的限制。有关详细讨论和解决方法,请参阅。

请参阅有关Excel DNA Google组的讨论:在中给出的解决方法不起作用。