2009-11-09 15 views
8

Próbuję otworzyć skoroszyt programu Excel i próbuję uzyskać w nim arkusz roboczy. Linia Excelapp.workbooks.Open rzuca wyjątek jakoBłąd podczas otwierania skoroszytu programu Excel za pomocą kodu C#

System.Runtime.InteropServices.COMException od HRESULT: 0x800A03EC na Microsoft.Office.Interop.Excel.Workbooks.Open

Oto mój kod :

Excel.Application excelApp = new Excel.ApplicationClass(); 
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(strWBPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, true); 

StrWbPath to moja lokalizacja w programie Excel. Mam na myśli 2007 excel i dodano Microsoft.office.interop.excel wersji 12.0.0.0.

+0

jakiego typu aplikacji to jest? aplikacja konsolowa? asp.net/winforms? – shahkalpesh

+0

Aplikacja Asp.net – Amrita

Odpowiedz

0

Co się stanie, jeśli spróbujesz System.Reflection.Missing.Value zamiast Type.Missing?

Pozdrawiam,

M.

0

Która klasa używasz?

Microsoft.Office.Interop.Excel.ApplicationClass 

jeśli ten następnie spróbuj zmienić go

Microsoft.Office.Interop.Excel.Application 
5

(przepraszam za odpowiedzi na to stare pytanie, ale google wynik # 1 dla tego problemu i prawidłowa odpowiedź brakuje).

Błąd występuje, ponieważ program Excel uważa, że ​​skoroszyt został uszkodzony. Podczas otwierania pliku Excel, ostatni parametr mówi, jak radzić sobie z tą sytuacją. Przekaż Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData, aby poinstruować go, aby pobrać dane (Zostanie otwarte okno informujące, że użytkownik excel próbował wyodrębnić dane, jeśli plik jest uszkodzony).

Jednak zauważyłem, że ten problem może być również spowodowany, jeśli skoroszyt, który próbujesz otworzyć, ma inne ustawienia narodowe niż twój program Excel (został zapisany na komputerze przy użyciu innego języka) LUB twój system nie ma ustawień regionalnych zestaw.

Chociaż jest to wyjątkowo głupie, łatwo je pokonać. Dla mnie rozwiązaniem było po prostu ustawić bieżące locale do en-us przed otwarciem pliku:

static System.Globalization.CultureInfo oldCI; 
oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; 
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 
xlWorkBook = xlApp.Workbooks.Open(filePath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData); 
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 

zasługa this page

Powiązane problemy