2009-05-21 129 views
16

我正在使用Window Service項目。必須按順序將數據寫入Excel文件中。Excel錯誤HRESULT:0x800A03EC嘗試獲取單元格名稱的範圍

但有時候,有時候,當服務試圖獲取單元格名稱的範圍時,該服務拋出異常「異常來自HRESULT:0x800A03EC」。

我已經把打開excel表的代碼,並在這裏獲取單元格。

  • OS:視窗服務器2003處:
  • 的Microsoft Office 2003 SP2

1:打開Excel工作表

m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5, 
    "", "", true, Excels.XlPlatform.xlWindows, ";", 
    true, false, 0, true, 0, 0); 

2:獲取單元寫入

protected object m_MissingValue = System.Reflection.Missing.Value; 
Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue); 
// error from this method, and cell name is string. 
+0

你說「有時候」的方式讓我想到這個答案:http://stackoverflow.com/questions/20422387/adding-formula-to-cell-exception-from-hresult-0x800a03ec/26591841# 26591841 – 2014-10-27 16:11:26

+0

我有同樣的問題 在C#代碼中,我鍵入`xApp.Cells(3,1).FormulaR1C1 =「= SUM(R [-2] C:R [-1] C)」`:failed;那麼`xApp.Cells(3,1).FormulaR1C1 =「=(R [-2] C + R [-1] C)」`:失敗;然後`xApp.Cells(3,1).FormulaR1C1 =「= A1 + A2」`成功 – 2016-07-12 10:52:53

回答

17

錯誤代碼0x800A03EC(或 - 2146827284)表示NAME_NOT_FOUND;換句話說,你已經要求了一些東西,而Excel無法找到它。

這是一個通用的代碼,它可以應用於許多無法找到的東西,例如使用當時無效的屬性,如PivotItem.SourceNameStandard在PivotItem沒有應用過濾器時拋出此問題。 Worksheets["BLAHBLAH"]拋出這個,當工作表不存在等等。一般來說,你要求一個具有特定名稱的東西,它不存在。至於爲什麼,這將採取一些挖掘你的一部分。

檢查您的工作表是否確實有您要求的範圍,或者.CellName肯定會給出您要求的範圍名稱。

3

我發現了一個可能的溶膠ution這裏:http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15

編輯:

如果您使用Microsoft Visual Basic .NET,微軟的Visual C#.NET,或Microsoft Visual C++ Microsoft Excel自動運行,你可以調用某些方法,因爲當收到以下錯誤該機器的區域設置爲美國英語(區域設置ID或LCID 1033)以外的東西:

從HRESULT異常:0x800A03EC

和/或

舊的格式或無效的類型庫

解決方案1:


要解決這個錯誤,您可以設置的CurrentCulture爲en-US時,執行與Excel和使用這些重置回你的ORIGINALE代碼2個功能。

//declare a variable to hold the CurrentCulture 
System.Globalization.CultureInfo oldCI; 
//get the old CurrenCulture and set the new, en-US 
void SetNewCurrentCulture() 
{ 
    oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; 
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
} 
//reset Current Culture back to the originale 
void ResetCurrentCulture() 
{ 
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 
} 

解決方案2:


另一種解決方案可以工作,創造下的Microsoft Office \ OFFICE11一個1033的目錄(或相應的辦公版),EXCEL.EXE複製到1033目錄,並將其重命名爲xllex.dll。

儘管您可能使用一種解決方案來解決問題,但在美國英語以外的語言環境中調用Excel對象模型時,Excel對象模型的行爲可能會有所不同,並且您的代碼可能會以您未曾想到的方式失敗。例如,您可能有代碼將範圍的值設置爲日期:

yourRange。值2 =「10/10/09」

根據區域設置該代碼可以採取不同導致在Excel投入範圍內的任何以下值:

二零零九年十月一十日 2009年9月10日 月9,2010

+0

解決方案1爲我工作。在法國,「SUM」的含義是「SOMME」。我通過C#將「SUM」指向我的英文版Excel。公式很好,但Excel表示`#NAME`。在單元格上雙擊並按下ENTER鍵後,Excel不顯示任何結果。在C#中發送`SOMME`輸出`SUM`。所以,解決方案1允許我發送'SUM'而沒有錯誤。 – 2016-07-12 11:42:35

0

枚舉名稱並調用worksheet.get_Range(name)時遇到此錯誤代碼。它似乎發生在名稱不適用於範圍時,在我的情況下它是一個宏的名稱。

2

我得到了錯誤,在工作表名稱空間:

using (var range = _excelApp.Range["Sheet Name Had Space!$A$1"].WithComCleanup()) 

我通過把周圍的表名的單引號用空格固定它:

using (var range = _excelApp.Range["'Sheet Name Had Space'!$A$1"].WithComCleanup()) 
-1

如果你可以複製整個異常,它會好得多,但是一旦我面對這個異常,這是因爲從你的dll文件調用的函數,我猜是Aspose.dll沒有很好地簽名。我想這可能是this

可能的重複,爲了找出你的DLL沒有被很好地簽名,你應該右鍵單擊它並進入簽名,它會告訴你它是否有已被電子簽名或沒有。

1

我有這個問題,當我試圖使用range.AddComment()函數。在添加評論之前,我可以通過調用range.ClearComment()來解決這個問題。

4

我遇到了這個錯誤,因爲我試圖寫一個字符串到一個以「=」開頭的單元格。

解決的辦法是在等號前加一個「'」(撇號),這是告訴excel你不是的方式,實際上是試圖寫一個公式,只是想打印等於標誌。

0

我忘記解除工作簿或工作表時忘記了這一點。

0

完全沒有意義的錯誤800A03EC(微軟對Windows的羞恥感)就像是「OPERATION NOT SUPPORTED」。

,當你打開了一個新的Excel版本,當前您的Excel版本不理解創建內容的文檔可能發生

  • 當您將文檔保存到您從加載它的同一路徑(文件已經打開並鎖定)

但主要是你會看到這個錯誤是由於嚴重錯誤在Excel中。

  • 例如Microsoft.Office.Interop.Excel.Picture有一個屬性「Enabled」。當你打電話給你時,你應該會收到一個bool值。但相反,你會得到一個錯誤800A03EC。這是一個錯誤。
  • Exel 2013和2016中存在一個非常胖的錯誤:當你自動化一個Excel進程並設置Application.Visible=trueApplication.WindowState = XlWindowState.xlMinimized時,你會從不同的函數獲取數百個800A03EC錯誤(如Range.Merge(),CheckBox.Text, Shape.TopLeftCell,Shape.Locked等等)。 Excel 2007和2010中不存在此錯誤。
0

使用Dominic的答案我發現我的問題的答案在應用到範圍之前,源數據中特別是一個無效的DateTiime。在數據庫,.NET和Excel之間的某個地方,日期的轉換默認爲「1/1/1899 12:00:00 AM」。我必須檢查它並將其轉換爲空字符串,併爲我修復它。

if (objectArray[row, col].ToString() == "1/1/1899 12:00:00 AM") 
{ 
    objectArray[row, col] = string.Empty; 
} 

這可能是一個非常具體的例子,但希望這將節省別人一些時間,如果他們試圖追查一件無效數據。

相關問題