2016-11-16 71 views
0

時:Excel的互操作收到COMException HRESULT:0x800A03EC訪問我在使用Excel互操作時,電池是隱藏的,我訪問它,像這樣從C#在Excel中訪問命名的單元格的問題隱藏單元格

bool SomeBoolean = WorkSheet.Range["MyRangeName"].Value; 

範圍當我訪問它時隱含地調用get_range,這是根據堆棧跟蹤拋出異常的。該代碼用於直接調用get_range,並且具有相似的結果。

如果我取消隱藏單元格,它工作正常。如果我逐行通過代碼,它可以正常工作(這總是令人沮喪的情況)。

當然,我可以取消隱藏單元格解決這個問題,但我想嘗試找到一個更好的解決方案。我對這裏的MSDN文檔和幾個主題進行了深入研究,但似乎找不到任何東西。任何幫助將非常感激!

MSDN頁面Worksheet.Range:https://msdn.microsoft.com/en-us/library/office/ff836512.aspx

+0

我不能重複這個問題。我知道我以前訪問過隱藏的範圍--Interop(或者說VBA)似乎從不關心。恰恰相反,我必須避開隱藏的範圍。我把這個作爲測試來運行,我真的無法讓它拋出這個錯誤。你可以上傳你的電子表格(或其相關部分)到DropBox或類似的東西嗎?我非常好奇。 – Hambone

回答

0

感謝大家的努力幫助我解開這個謎。在我的調試過程中,我注意到它有時會神祕地發揮作用,而其他時間則不起作用,然後我瀏覽了導致該問題的代碼。

這個問題的原因是該範圍正在從被設置爲在插件被調用的時候當前選定工作表中的工作表搜索。因此,如果工作簿中的正確選項卡在通話時未選中,則會失敗。如果它被選中,則成功。事實證明,這與隱藏的單元格無關。相當令人沮喪,但至少現在我們知道了!

1

這是由設計。根據定義,隱藏的單元格不可訪問。

自己嘗試一下。在Excel中創建工作表,隱藏一些列,然後搜索(按值,而不是公式)隱藏單元格中的值。您會看到一個對話框,指出找不到該值。

如果你不同意這個行爲的人,然後把它與微軟。

enter image description here

+0

謝謝你的迴應,丹。我嘗試了你的建議並看到了你所做的同樣的消息。我正在使用的代碼是.Net重寫了我們繼承的舊VBA插件(一個XLAM文件)。棘手的是,這個VBA插件沒有訪問隱藏單元值的問題,這讓我感到困惑。它是有道理的,如果它從來不能訪問,並且這是設計,我不應該能夠訪問它與C#。但是,爲什麼VBA工作呢?我對Excel編程不是很有經驗,所以我可能在這裏錯過了一些東西...... –

+0

嗯,沒有調試它或檢查互操作程序集我不確定。如果它是我的應用程序,我會在獲得它們的價值之前取消隱藏單元格。使用Office interop很少會優雅。另一種解決方案可能是使用像EPPlus這樣的第三方庫,但我不確定你的宏是做什麼的。 –