2012-10-08 81 views
11

Jak odczytać pliki xls i xlsx przy użyciu C# w formacie OpenXML Bez użycia połączenia OLEDB. Szukam procedury w formacie Open XML.Jak odczytać pliki xls i xlsx za pomocą C#

Poniżej znajduje się kod, w którym użyłem preoksu OLEDB. Ale szukam formatu OpenXML.

public static DataTable ConvretExcelToDataTable(string FilePath) 
{ 
    string strConn = string.Empty; 

    if (FilePath.Trim().EndsWith(".xlsx")) 
    { 
     strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", FilePath); 
    } 
    else if (FilePath.Trim().EndsWith(".xls")) 
    { 
     strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", FilePath); 
    } 

    OleDbConnection conn = null; 
    OleDbCommand cmd = null; 
    OleDbDataAdapter da = null; 
    DataTable dt = new DataTable(); 
    try 
    { 
     conn = new OleDbConnection(strConn); 
     conn.Open(); 
     cmd = new OleDbCommand(@"SELECT * FROM [Sheet1$]", conn); 
     cmd.CommandType = CommandType.Text; 
     da = new OleDbDataAdapter(cmd); 
     da.Fill(dt); 
    } 
    catch (Exception exc) 
    { 
     Console.WriteLine(exc.ToString()); 
     Console.ReadLine(); 
    } 
    finally 
    { 
     if (conn.State == ConnectionState.Open) 
      conn.Close(); 
     conn.Dispose(); 
     cmd.Dispose(); 
     da.Dispose(); 
    } 
    return dt; 
} 

Wymaganie jest wdrożenie powyższej konwersji w formacie OpenXML. Dzięki.

+0

XLS to nie OpenXML. Dlatego nie można używać zestawu SDK OpenXML do odczytywania plików XLS. Możesz go używać tylko dla plików XLSX. –

+0

Odpowiedziałem na podobne pytanie ostatnio [tutaj] (http://stackoverflow.com/a/12746187/969613) – JMK

+0

Ktoś proszę wyjaśnić moje wątpliwości w powyższym komentarzu. Dzięki. –

Odpowiedz

3

będziemy chcieli OpenXML SDK dla XLSX:

http://www.microsoft.com/en-gb/download/details.aspx?id=30425

Ale dla XLS, nie będzie w stanie wykorzystać ten format XLS nie jest oparty na języku XML.

używam biblioteki NPOI dostępu starsze pliki:

http://npoi.codeplex.com/

Biblioteka NPOI obsługuje również XLSX, więc to nie daje spójny sposób dostępu do nich. Minusem jest to, że musisz ręcznie przeglądać arkusze/wiersze/kolumny i tworzyć zestaw danych, który prawdopodobnie wpłynie na wydajność, jeśli masz duże skoroszyty. Jeśli chcesz używać zapytań do uzyskiwania dostępu do danych, OLEDB jest jedyną metodą, którą znalazłem.

2

Jeśli masz zainstalowany program Excel, możesz użyć Microsoft.Office.Interop.Excel;

http://support.microsoft.com/kb/302084

+2

W komputerze klienta program Excel może nie zostać zainstalowany. To jest główny powód, szukam alternatywnego rozwiązania, takiego jak format OpenXML. Dzięki. –

+0

szukam tego samego rozwiązania –

+0

Jeśli chcesz, aby arkusz kalkulacyjny był początkowo zapisany w formacie innym niż .xls, nie musisz już więcej czytać arkusza kalkulacyjnego Excela, a prostsze rozwiązania stają się dostępne. . –

0

Usuń \ z ciągu połączenia. Możesz podać, jak poniżej.

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filepath.ToString() + ";Extended Properties=Excel 12.0 Xml;"); 
Powiązane problemy