2009-03-13 10 views
8

Potrzebuję pobrać dane z xls, potrzebuję również, aby użytkownik mógł zmienić lokalizację pliku, który będzie. Tak więc OleDbConnection wydawał się dobrym początkiem, i to było do pierwszej scalonej komórki.Otwórz arkusz kalkulacyjny programu Excel 2003 za pomocą C#. Nie można znaleźć instalowalnego modułu ISAM. Wyjątek

To działa dla wszystkich, ale połączonego komórki:

OleDbCommand cmd = new OleDbCommand(); 
cmd.Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=F:\test.xls;Extended Properties=Excel 8.0;"); 
cmd.CommandText = "SELECT * FROM [Sheet$]"; 
cmd.Connection.Open(); 

Uważam, że powinno to umożliwić dostęp do połączonych komórek:

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;"); 

Ale potem dostać nie można znaleźć instalowalnego wyjątek ISAM na cmd.conn.open();

Śledziłem porady tutaj: http://support.microsoft.com/kb/209805

And tutaj: Error: "Could Not Find Installable ISAM"

bez powodzenia.

Jestem otwarty na inne sposoby pobierania danych z xls. Lub nawet gdyby istniało polecenie, mogłem uruchomić xls, aby usunąć zwierciadlane komórki, które mogą działać.

Odpowiedz

15

myślę, że to właśnie dlatego trzeba załączyć właściwości rozszerzone w cudzysłowach, jeśli masz więcej niż jedną

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls; 
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"); 

Lub jeśli pojedyncze cudzysłowy nie działają (masz pomysł)

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls; 
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";"); 

Podczas gdy Twój przykład go nie pokazuje, ten błąd może być również spowodowany spacjami w ścieżce pliku. W takim przypadku należy również zawrzeć ścieżkę pliku w cudzysłowach.

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";... 
+0

Kto pomyślał o tej okropnej składni? – configurator

+0

Musiałem go nieco zmienić: OleDbConnection (@ "Dostawca = Microsoft.Jet.OLEDB.4.0; Źródło danych = F: \ test.xls; Właściwości rozszerzone =" Excel 8.0; HDR = NO; IMEX = 1 '"); – NitroxDM

+0

Bardzo dziękuję za tę odpowiedź. –

2

Zakładając wymagania systemowe obejmują swoją instalację programu Excel, można skorzystać z biblioteki obiektów programu Excel

Excel.Sheets sheets = m_Excel.Worksheets; 
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1); 
Excel.Range range = worksheet.get_Range("A1", "E1".ToString()); 

itp

Zobacz również VSTO

-1

jest nieodpłatnie arkusz składnik .NET i powinien zrobić wszystko, co chcesz, dla 32-bitowego i 64-bitowego .NET bez zależności od Excela (lub czegokolwiek innego a .NET 2.0+).

Możesz zobaczyć na żywo próbki ASP.NET here i pobrać bezpłatną wersję próbną here, jeśli chcesz spróbować samemu.

Zastrzeżenie: Jestem właścicielem SpreadsheetGear LLC

1

Spróbuj

miałem tego problemu. tylko z powodu kwotowań

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'"; 
Powiązane problemy