it-swarm.com.de

So lesen Sie Daten aus einer Excel-Datei mit c #

Meine Anwendung muss Daten aus einer Excel-Datei lesen. Ich benutze .NET und C # für die Entwicklung. Ich kann MS Office nicht im System installieren. Aus diesem Grund kann meine Anwendung die Excel-Datei nicht lesen und gibt beim Laden der DLL für Excel einen Fehler aus.

Wie kann ich auf eine Excel-Datei in meiner Anwendung in einem System zugreifen, in dem ms office nicht installiert ist?

57
TutuGeorge

Es besteht die Möglichkeit, OleDB zu verwenden und die Excel-Tabellen wie Datentabellen in einer Datenbank zu verwenden ...

Nur ein Beispiel .....

string con =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" + 
  @"Extended Properties='Excel 8.0;HDR=Yes;'";    
using(OleDbConnection connection = new OleDbConnection(con))
{
    connection.Open();
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using(OleDbDataReader dr = command.ExecuteReader())
    {
         while(dr.Read())
         {
             var row1Col0 = dr[0];
             Console.WriteLine(row1Col0);
         }
    }
}

In diesem Beispiel verwenden Sie das Microsoft.Jet.OleDb.4.0 Provider zum Öffnen und Lesen der Excel-Datei. Wenn die Datei jedoch vom Typ xlsx ist (ab Excel 2007), müssen Sie die Komponenten Microsoft Access Database Engine herunterladen und auf dem Zielcomputer installieren.

Der Anbieter heißt Microsoft.ACE.OLEDB.12.0;. Beachten Sie, dass es zwei Versionen dieser Komponente gibt, eine für 32-Bit und eine für 64-Bit. Wählen Sie die für die Bitanzahl Ihrer Anwendung und die installierte Office-Version (falls vorhanden) geeignete aus. Es gibt eine Menge Macken, wenn dieser Treiber für Ihre Anwendung richtig funktioniert. Siehe diese Frage zum Beispiel .

Natürlich muss Office nicht auf dem Zielcomputer installiert sein.

Obwohl dieser Ansatz einige Vorteile hat, sollten Sie meiner Meinung nach dem Link, der durch einen Kommentar in Ihrer Frage angezeigt wird, besondere Aufmerksamkeit schenken Lesen von Excel-Dateien aus C # . Es gibt einige Probleme bei der korrekten Interpretation der Datentypen und wenn die in einer einzelnen Excel-Zelle vorhandene Datenlänge länger als 255 Zeichen ist

88
Steve

CSharpJExcel zum Lesen von Excel 97-2003-Dateien (xls): http://sourceforge.net/projects/jexcelapi/

und ExcelPackage zum Lesen von Excel 2007/2010-Dateien (Office Open XML-Format, xlsx): http://excelpackage.codeplex.com/

und ExcelDataReader, die anscheinend beide Formate verarbeiten können: https://github.com/ExcelDataReader/ExcelDataReader

Viel Glück!

19
Obama

Ich habe keine Maschine zur Verfügung, um dies zu testen, aber es sollte funktionieren. Zunächst müssen Sie wahrscheinlich entweder den 2007 Office System-Treiber: Data Connectivity Components oder den Microsoft Access Database Engine 2010 Redistributable installieren. Versuchen Sie dann den folgenden Code, beachten Sie, dass Sie den Namen des Arbeitsblatts in der Select-Anweisung unten ändern müssen, um mit dem Arbeitsblattnamen in Ihrer Excel-Datei übereinzustimmen:

using System.Data;
using System.Data.OleDb;

namespace Data_Migration_Process_Creator
{
    class Class1
    {
        private DataTable GetDataTable(string sql, string connectionString)
        {
            DataTable dt = null;

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                {
                    using (OleDbDataReader rdr = cmd.ExecuteReader())
                    {
                        dt.Load(rdr);
                        return dt;
                    }
                }
            }
        }

        private void GetExcel()
        {
            string fullPathToExcel = "<Path to Excel file>"; //ie C:\Temp\YourExcel.xls
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
            DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);

            foreach (DataRow dr in dt.Rows)
            {
                //Do what you need to do with your data here
            }
        }
    }
}

Hinweis: Ich habe keine Umgebung, um dies zu testen (eine mit installiertem Office), daher kann ich nicht sagen, ob es in Ihrer Umgebung funktioniert oder nicht, aber ich verstehe nicht, warum es nicht funktionieren sollte.

8
Mark Kram

Speichern Sie die Excel-Datei in CSV und lesen Sie die resultierende Datei mit C # mithilfe einer CSV-Lesebibliothek wie FileHelpers .

5
Robert Harvey

Konvertieren Sie die Excel-Datei in .csv file (kommagetrennter Wert file) und jetzt können Sie es leicht lesen.

4
petko_stankoski