2011-08-17 106 views
13

我在Worksheet.range方法上獲得HRESULT:0x800A03EC。行數超過70K。 Office 2007的HRESULT:0x800A03EC在Worksheet.range

代碼:

Microsoft.Office.Interop.Excel.Range neededRange 
    = currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]]; 

這裏我行數超過65530。打破這個功能。我觀察到,它只有當行數超過65530時纔會中斷。

+2

如果你正在尋找答案,一小段代碼片段或多一點上下文不會傷害 – Eddy

+0

'Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range [cell.Cells [1,1],cell。單元格[nRowCount,nColumnCount]];'在這裏,我的行數超過66000.列數是18.打破這個功能。 – Cannon

+0

使用Excel 2010,我可以得到一個沒有問題的範圍。檢查你的問題是否真的是使用Range方法,或者cell.Cells [nRowCount,nColumnCount]引起異常。 – Eddy

回答

21

此問題,如果您使用的是向後兼容片(.xls的),而不是一個的.xlsx

爲了讓張到預Office 2007的版本,它不能包含超過65000行打開時。您可以使用ctrl + arrowdown來檢查表格中的行數,直到達到底部。如果您嘗試獲取大於該行數的範圍,將會產生錯誤

+6

並非總是如此,我遇到了一個.xlsx表單的問題。 – Alex

+0

@我也是。你解決了這個問題嗎? – user2179427

+0

@ user2179427不幸的是,我不得不妥協,採取不同的方法,你想達到什麼目的?我最近在Excel interop上做了很多工作,所以我可能會提供幫助。 – Alex

0

編輯:這是更好! 你不需要那個舊功能,對不起。請執行以下操作:

Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range["A1", ((Microsoft.Office.Interop.Excel.Range)currentWS.Cells[nRowCount, nColumnCount])]; 

這應該像魅力一樣工作。並且爲了將來的參考,請將您正在使用的相關代碼放入您的問題中。不要讓人們在評論中提出要求。我想這就是爲什麼你被低估了。

+0

我試過你的唉,但它仍然是同樣的例外。所以我不認爲它跟我起訴Range函數有什麼關係。 – Cannon

+0

哦,那很奇怪。它對我的測試非常大範圍的工作。 –

+0

我不明白這個問題。但是,這是解決我的問題的事情。轉至Excel選項>保存>以此格式保存文件>選擇「Excel工作簿(*。xlsx)」。以前,我的工作書是在[Compatibuility Mode]中打開的。 – Cannon

1

我不明白這個問題。但是,這是解決我的問題的事情。

轉至Excel選項>保存>以此格式保存文件>選擇「Excel工作簿(*。xlsx)」。以前,我的工作簿是在[Compatibuility Mode]中打開的,現在它們以正常模式打開。範圍函數適用於此。

+2

爲什麼是/在我的答案下面。 Compat模式意味着65k行的限制,否則在較早的excel版本中不能打開表單。 – Eddy

+0

是的。完全正確。如果您使用Office 2007,我的答案就是解決此問題。謝謝。 – Cannon

+0

我正在使用office 2010(interlop excel 14),我正在嘗試構建xls文件,並在檢索單元格時遇到此錯誤。有任何想法嗎? –

3

簡單地說,excel文件已損壞。 最好的解決辦法是修改/修復文件(複製現有文件並重新命名)

15

我們收到了相同的結果。唯一的例外是

堆棧跟蹤:在Microsoft.Office.Interop.Excel._Workbook.SaveAs(目標文件名,對象的FileFormat,對象口令,對象WriteResPassword,對象 ReadOnlyRecommended,對象CreateBackup,XlSaveAsAccessMode AccessMode,對象衝突解決,對象AddToMru,對象TextCodepage,對象文本 VisualLayout,對象本地)`

與來自HRESULT

異常的內異常: 0x800A03EC 2012-11-01 10:37:59`

我們能夠從this post,我在這裏引用爲了方便解決與信息的問題...

  1. 登錄到服務器。管理員。
  2. 轉到「開始」 - >「運行」和「從所有 用戶顯示進程」
  3. 輸入「taskmgr」
  4. 進入任務管理器的進程選項卡,並檢查是否有任何「Excel中。exe文件」列表中的條目,右鍵單擊 條目,然後選擇‘結束進程’
  5. 關閉任務管理器
  6. 轉到‘開始’ - >‘運行’,輸入‘SERVICES.MSC’
  7. 停止該服務是否正在運行自動化Excel
  8. 轉到「開始」 - >「運行」,輸入「DCOMCNFG」
  9. 這將彈出的組件服務窗口,展開了「控制檯 根」 - >「計算機「 - >」DCOM配置「
  10. 查找組件列表中的」Microsoft Excel Application「。
  11. 右鍵單擊條目並選擇「屬性」
  12. 轉至屬性對話框中的「標識」選項卡。
  13. 選擇「交互式用戶」。
  14. 點擊「確定」按鈕。
  15. 切換到服務控制檯
  16. 啓動服務再次自動化Excel
  17. 測試你的應用程序。
+0

它正在工作!謝謝 – Khaneddy2013

+2

Re。 #7:服務的名稱是什麼? –

+0

我也在做數字1- 4 – bot

5

如果您在保存的分區上沒有空間,也可能導致這種情況。

我檢查了我的HD並將其設置爲最大。將一些不需要的文件移動到不同的分區解決了我的問題。

12

綜觀以上各方面的反應,並以我個人最近的經驗繪製(我得到這個錯誤代碼做完全無關的東西 - 設置Application.Calculation)我的結論是相同的錯誤代碼是用來指示多個不相關的問題。所以@Garreh你應該可能會問一個新的問題(不是任何人都可以單獨根據錯誤代碼提供幫助)。我已經看到了與C#中的Word interop一樣的工作,其中HRESULT似乎用於幾乎所有類型的錯誤。我從來沒有找到任何令人滿意的Microsoft文檔來說明代碼的含義。

+0

這有點有趣,一些數字代表不同的錯誤,類似於ID –

10

我遇到了這個問題。

發現在我的代碼的某個地方,我要求它從0開始計數(就像在C#代碼中一樣)。

在1.

+0

有同樣的問題,幸運的是我看到您的評論。 – Taurib

+0

有同樣的問題,我知道這是愚蠢的 - _-謝謝:) –

+0

我得到了相同的COMException,與hresult 0x800a03ec。這是我從第0行開始,而不是第1行。 – Rune

0

原來的Excel開始計數我有一個錯誤用確切的代碼時,我試圖細胞分配陣列range.Value。在我的情況下,這是錯誤的數據格式的問題。單元格的數據格式設置爲DATE,但用戶輸入錯誤,而不是「20.02.2013」​​輸入日期「20.02.0213」。 Excel的COM對象拒絕接受'0213年',並因此錯誤引發異常。

0

我也遇到同樣的問題,當時我正在開發一個將項目內容導出到excel文件的應用程序。

我無法找到解決的論壇,我的問題,然後我檢查Excel的最大容量及以下鏈接,說

「工作表的大小1,048,576行16,384列」,這是在發現問題我情況下,我出口的不止是那些行。請參考下鏈接細節

http://answers.microsoft.com/en-us/office/forum/office_2013_release-excel/with-excel-2013how-many-rows-will-this-contain/271264fb-3ab8-4c5b-aa0d-7095c5ac6108

問候 PRASHANT韋迪

1

僅供參考,得到了錯誤嘗試應用行樣式....

wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red) 
0

不能夠回覆/ endorse this answer,所以在這裏發帖:

事實上,源/目的地的格式範圍wh將數據從一個範圍移動到另一個範圍也可能導致此錯誤。

在我的情況下,我想要複製的範圍包含一個日期格式的列,並且該列包含一個單元格,其中包含一個無效的日期值(由於它的值是負值,因此它甚至沒有格式化)。因此,兩個範圍之間的複製操作正在所述單元處停止,從而產生這裏討論的錯誤消息。

在我的情況下的解決方案是使用Range.Value2代替Range.Value,這引起的Excel繞過格式化單元爲一個日期(更多詳情here)。但是,這會使您的日期和時間列顯示爲整數和小數。但是,如果通過相應地設置其範圍/列/單元格。數字格式屬性,您可以將格式更改爲所需的格式。

0

我不得不執行以下語句時相同的錯誤代碼:

sheet.QueryTables.Add("TEXT" & Path.GetFullPath(fileName), "1:1", Type.Missing) 

的原因是缺少分號(;) 「TEXT」 之後。

這裏是正確的:

sheet.QueryTables.Add("TEXT;" & Path.GetFullPath(fileName), "1:1", Type.Missing) 
0

我得到這個例外,因爲我打字:

ws.get_Range("K:K").EntireColumn.AutoFit(); 
ws.get_Range("N:N").EntireColumn.AutoFit(); 
ws.get_Range("0:0").EntireColumn.AutoFit(); 

見一個錯誤? 提示:Excel正在接受來自1的索引,但不能像C#那樣從0索引。

0

,因爲我試圖重命名字符太多

0

我與休W¯¯後同意片我得到這個錯誤「我的結論是相同的錯誤代碼是用來指示多個不相關的問題」

其他帖子沒有提到如果工作表被鎖定,這個錯誤頻繁發生。雖然我沒有測試過每一個場景,但是如果你試圖通過VSTO/Com在工作表被鎖定的情況下拋出這個錯誤,那麼看起來你在excel中無法做到的任何事情。例如。更改任何樣式工件(字體,字體大小,顏色,下劃線),更改Excel驗證,更改列寬,行高,公式

0

當您嘗試打開您的Excel工作表時,也會出現這種類型的錯誤,正在提示任何錯誤消息。簡單地說,你可以說你的excel文件損壞了。

0

這不是直接回答問題,但打開xlsx文件時出現此錯誤。問題是我在文件路徑中使用了正斜槓。另見https://stackoverflow.com/a/24635904/5932003。它曾用於Excel的早期版本,但不適用於版本1711(Build 8730.2127)。

我能夠使用IDispatch-> Invoke(...,EXCEPINFO,...)診斷問題。 EXCEPINFO對象包含有關錯誤的有用描述。我在C++的土地,但我懷疑類似於這個SO帖子的C#代碼將做的伎倆:Packaging IDispatch Invoke with Parameters in C# (with DISPPARAMS)

相關問題