2016-01-19 97 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

相關問題