none
Daten von MsSql Datenbank in Excelblatt laden RRS feed

  • Frage

  • Hi,

    wie kann ich am einfachste Daten aus einer Sql Datenbank in ein Excelblatt laden?

    Grüße

     

    Mittwoch, 1. Juni 2011 11:28

Antworten

  • Hallo C.,

    Wenn Du nicht während der Dateneingabe durch den Benutzer die Datenbank aktualisieren mußt, würde auch ich Dir den Weg über den OleDb Managed Data Provider und ADO.NET empfehlen. Es gibt viele Beispiele dazu, ich greife willkürlich eines heraus:

    Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory:
    http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

    Willst Du das ganze aus Excel heraus erledigen (aber weiterhin .NET verwenden), mußt Du ein VSTO Add-In schreiben.

    Gruß
    Marcel

    Mittwoch, 1. Juni 2011 12:40
    Moderator
  • Hi,

     

    kommt ganz darauf an wie du es machen willst. Die einfachste Möglichkeit ist im Excel Im Reiter Daten dir die Informationen direkt aus der Datenquelle per ODBC-Aufruf zu holen.

    Eine weitere Möglichkeit wäre der ADO-Zugriff über Excel-VBA

    Außerdem kannst du mit VSTO(Visual Studio Tools fpr Office) ein Workbook erstellen und hier zB. über ADO oder Linq die Daten in die Tabellenblätter ziehen.

    Welcher dieser Schritte wäre denn für dich am Besten geeignet?


    Cheers, Jörn Bosse
    Microsoft Student Partner
    Mittwoch, 1. Juni 2011 11:46
  • z.B. per ODBC.

    Schau dir mal folgenden Link an:

    http://csharp.net-informations.com/excel/csharp-excel-oledb-insert.htm

     

    Mittwoch, 1. Juni 2011 11:50

Alle Antworten

  • Hi,

     

    kommt ganz darauf an wie du es machen willst. Die einfachste Möglichkeit ist im Excel Im Reiter Daten dir die Informationen direkt aus der Datenquelle per ODBC-Aufruf zu holen.

    Eine weitere Möglichkeit wäre der ADO-Zugriff über Excel-VBA

    Außerdem kannst du mit VSTO(Visual Studio Tools fpr Office) ein Workbook erstellen und hier zB. über ADO oder Linq die Daten in die Tabellenblätter ziehen.

    Welcher dieser Schritte wäre denn für dich am Besten geeignet?


    Cheers, Jörn Bosse
    Microsoft Student Partner
    Mittwoch, 1. Juni 2011 11:46
  • z.B. per ODBC.

    Schau dir mal folgenden Link an:

    http://csharp.net-informations.com/excel/csharp-excel-oledb-insert.htm

     

    Mittwoch, 1. Juni 2011 11:50
  • kommt ganz darauf an wie du es machen willst. Die einfachste Möglichkeit ist im Excel Im Reiter Daten dir die Informationen direkt aus der Datenquelle per ODBC-Aufruf zu holen.

    Eine weitere Möglichkeit wäre der ADO-Zugriff über Excel-VBA.

    Außerdem kannst du mit VSTO(Visual Studio Tools fpr Office) ein Workbook erstellen und hier zB. über ADO oder Linq die Daten in die Tabellenblätter ziehen.

    Welcher dieser Schritte wäre denn für dich am Besten geeignet?


    Also so genau weiß ich noch nicht ob ich eine Windows Form oder eine VSTO Anwendung machen will.

    Ich will die Daten einlesen in Excel, Auswerten und evtl. auch wieder zurück schreiben.

    Da brauch ich ja dann auf jeden Fall noch irgendwelche DB_Update aktionen.

    Die erste Methode direkt in Excel den Reiter Daten zu verwenden will ich nicht, ich will nen Button drücken der mir die Daten einliest und danach einen Button drücken der die Daten wieder zurück schreibt.

     

    Mittwoch, 1. Juni 2011 12:18
  • Hallo C.,

    Wenn Du nicht während der Dateneingabe durch den Benutzer die Datenbank aktualisieren mußt, würde auch ich Dir den Weg über den OleDb Managed Data Provider und ADO.NET empfehlen. Es gibt viele Beispiele dazu, ich greife willkürlich eines heraus:

    Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory:
    http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

    Willst Du das ganze aus Excel heraus erledigen (aber weiterhin .NET verwenden), mußt Du ein VSTO Add-In schreiben.

    Gruß
    Marcel

    Mittwoch, 1. Juni 2011 12:40
    Moderator
  • Danke schön,

    also so ganz werd ich noch nicht schlau aus den Beispielen.

    Mit VSTO habe ich schon Erfahrung gemacht. Da will ich halt auf jeden Fall vermeiden, das Blatt mit Excel.Range zugriffen zu füllen.

     

    Was ich bisher verstanden habe ist, das ich auf das Excel Sheet einen Connectionstring machen kann, auf die SqlTabelle mach ich das ja auch.

    Nur wie ich die 2 Connectionstrings miteinander zusammen bringe ist mir noch nicht klar.

    Grüße

     

    Mittwoch, 1. Juni 2011 13:03
  • > Danke schön

    Gern.

    > Mit VSTO habe ich schon Erfahrung gemacht. Da will ich halt auf jeden Fall vermeiden, das Blatt mit Excel.Range zugriffen zu füllen.

    DataBinding über ListObject funktioniert m.E. relativ gut.

    ListObject Control:
    http://msdn.microsoft.com/en-us/library/2ttzcbhb.aspx

    Gruß
    Marcel

    Mittwoch, 1. Juni 2011 13:18
    Moderator
  • So, danke für die Antworten.

    Ich schau mal wie ich das am Montag umsetzen kann.

    Schönes WE

    C

     

    Mittwoch, 1. Juni 2011 13:42
  • Hallo C.,

    Wenn Du nicht während der Dateneingabe durch den Benutzer die Datenbank aktualisieren mußt, würde auch ich Dir den Weg über den OleDb Managed Data Provider und ADO.NET empfehlen. Es gibt viele Beispiele dazu, ich greife willkürlich eines heraus:

    Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory:
    http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx

    Willst Du das ganze aus Excel heraus erledigen (aber weiterhin .NET verwenden), mußt Du ein VSTO Add-In schreiben.

    Gruß
    Marcel

    Hallo Marcel,

    danke für die Antwort, jetzt hab ich auch mal wieder Zeit gehabt das ganze zu testen.

    Ich krieg aber diesen Provider=Microsoft.Jet.OLEDB.4.0 nicht zum laufen, er scheint bei mir nicht installiert zu sein.
    Grüße

    Montag, 18. Juli 2011 09:12
  • Kann es sein, dass Dein Programm mit 64 Bit Läuft? Wenn ja, dann geht die Jet nicht. Sie will nur 32 Bit.
     
    --
    Viele Gruesse
    Peter
    ------=_NextPart_000_01C7_01CC4550.621C8C00
    Content-Type: text/html;
    charset="utf-8"
    Content-Transfer-Encoding: quoted-printable
     
    <HTML><HEAD></HEAD>
    <BODY dir=ltr>
    Kann es sein, dass Dein Programm mit 64 Bit Läuft? Wenn ja, dann geht die
    Jet nicht. Sie will nur 32 Bit.
     
    --
    Viele
    Gruesse
    Peter
    </BODY></HTML>
     
     
    Montag, 18. Juli 2011 11:41
  •  

    Hallo Peter,

    nein tut es nicht, mein Rechner ist etwas älter. :)

    Ich sollte allerdings auch nicht mit dem 4.0 arbeiten sondern mit dem 12.0.

    Momentan bekomme ich die Fehlermeldung das das Tabellenblatt nicht gefunden wird.

    Grüße

     

     

     

     string connectionString =
    @"Provider=Microsoft.ACE.OLEDB.12.0;"+
    "Data Source=ExcelWorkbook.xlsx;" +
    "Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";
    
    DbProviderFactory factory =
    DbProviderFactories.GetFactory("System.Data.OleDb");
    
    using (DbConnection connection = factory.CreateConnection())
    {
    connection.ConnectionString = connectionString;
    
    using (DbCommand command = connection.CreateCommand())
    {
    command.CommandText = "SELECT * FROM [Tabelle1$]";
    
    connection.Open();
    
    using (DbDataReader dr = command.ExecuteReader())
    {
    while (dr.Read())
    {
    Debug.WriteLine(dr.ToString());
    }
    }
    }
    }





    Montag, 18. Juli 2011 12:25