2016-01-19 68 views
-1

这是我发现了异常时:异常HRESULT:0x800A03EC插入Excel公式

System.Runtime.InteropServices.COMException(0x800A03EC):异常 从HRESULT:0x800A03EC

在系统.RuntimeType.ForwardCallToInvokeMember(字符串成员名称, 的BindingFlags标志,对象目标,的Int32 [] aWrapperTypes,MessageData & MSGDATA)
在Microsoft.Office.Interop.Excel.Range.set_Formula(对象 值)

我的代码如下所示:

Range rng = activeWorksheet.get_Range("A1"); 
rng.Formula = "=SUM(A4*C4;A5*C5;A6*C6;A7*C7)/SUM(A4:A7)"; 

每当我运行此代码,我得到前面提到的例外。但是,当我运行此代码:

Range rng = activeWorksheet.get_Range("A1"); 
rng.Formula = "=SUM(A4:A7)/4" 

这很好用。没有例外。

我检查了两个公式,他们在我的Excel中工作得很好。我试过设置:

Application.Calculation = XlCalculation.xlCalculationAutomatic; 

这并不是在所有帮助,我一直在谷歌上搜索这个解决方案,并没有发现任何有用的东西。有没有人有线索可能是错误的?

+0

您确定您使用正确的标志吗? ';'而不是':'?只是一个猜测。 –

+0

是的,使用正确的符号,我必须检查10次..它也适用于实际的Excel工作表,所以不存在公式问题。 – Peroxy

+0

这是一个数组公式,它应该有{} 。 – cronos2546

回答

4

Excel的COM接口讲美国,所以你需要在公式字符串中使用美国列表分隔符。用逗号替换你的分号,你应该没问题。

Range rng = activeWorksheet.get_Range("A1"); 
rng.FormulaArray = "=SUM(A4*C4,A5*C5,A6*C6,A7*C7)/SUM(A4:A7)"; 
+0

哦哇,非常感谢,这现在工作..从来没有想过本地化问题.. – Peroxy

+0

与Excel接口时,必须阅读:http://www.oaltd.co.uk/ExcelProgRef/Ch22/ProgRefCh22.htm – jkpieterse

0

您需要使用{}和R1C1引用,使用Range对象的FormulaArray属性将公式更新为数组公式。

“= SUM(R4C1 * R4C3; R5C1 * R5C3; R6C1 * R6C3; R7C1 * R7C3)/ SUM(R4C1:R7C1)”

+0

好吧,现在这确实插入到工作表中,但是,这不会通过Excel来计算,它会被视为一个字符串?我尝试了'rng.FormulaArray =“{= SUM(A4 * C4; A5 * C5; A6 * C6; A7 * C7)/ SUM(A4:A7)}”; '但它不计算任何东西。 – Peroxy

+0

那么对我来说,你必须使用R1C1作为FormulaArray属性。更新我的答案。 – cronos2546

+0

实际上,只是尝试删除{}并使用公式阵列属性 – cronos2546

相关问题