Daten per OleDB nach Excel ausgeben mit C#
| Über COM Interop kann man ja direkt auf Excel zugreifen. Hier kommt ein Beispiel , wie man Daten dorthin schreibt.
Beispiel stammt von hier: http://dotnet-snippets.de/dns/excel-datatable-mittels-oledb-in-excel-dokument-exportieren-SID272.aspx(Autor Hagen Sigel) C# |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.OleDb; using System.Runtime.Remoting; using System.Reflection; using System.Runtime.InteropServices; namespace Rainbird.Examples.Office.Excel.OLEDBAccess { /// <summary> /// Exportiert den Inhalt einer DataTable in ein neues Excel-Dokument. /// </summary> public { /// <summary> /// Privater Standardkonstruktor. /// </summary> private ExcelExport() { } /// <summary> /// Schreibt das Schema einer bestimmten Tabelle in eine neue Excel-Datei. /// </summary> /// <param name=”table”>Tabelle</param> /// <param name=”fileName”>Dateiname</param> public { // Excel im Hintergrund öffnen object excel = Activator.CreateInstance(Type.GetTypeFromProgID(”Excel.Application“)); // Auflistung der Mappeen abrufen object books = excel.GetType().InvokeMember(”Workbooks“, BindingFlags.IgnoreCase | BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, excel, new // Neue Mappe erstellen object book = books.GetType().InvokeMember(”Add“, BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, books, new // Auflistung der Tabellenblätter abrufen object sheets = book.GetType().InvokeMember(”Sheets“, BindingFlags.IgnoreCase | BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, book, new // Neues Tabellenblatt erstellen object sheet = sheets.GetType().InvokeMember(”Add“, BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, sheets, new // Name des Tabellenblatts festlegen sheet.GetType().InvokeMember(”Name“, BindingFlags.SetProperty, null, sheet, new // Zähler int i = 0; // Spalten der Tabelle durchlaufen foreach (DataColumn column in table.Columns) { // Zähler erhöhen i++; // Feldnamen einfügen object range = sheet.GetType().InvokeMember(”Cells“, BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new range.GetType().InvokeMember(”Value“, BindingFlags.SetProperty | BindingFlags.OptionalParamBinding, null, range, new } // Dokument speichern book.GetType().InvokeMember(”SaveAs“, BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, book, new // COM-Verweise freigeben Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(sheets); Marshal.ReleaseComObject(book); Marshal.ReleaseComObject(books); // Excel schließen excel.GetType().InvokeMember(”Quit“, BindingFlags.InvokeMethod, null, excel, new // Excel.Application COM-Verweis freigeben Marshal.ReleaseComObject(excel); } /// <summary> /// Erzeugt eine OLEDB-Verbindungszeichenfolge für ein bestimmtes Excel-Dokument. /// </summary> /// <param name=”fileName”>Dateiname (.XLS)</param> /// <returns>Verbindungszeichenfolge</returns> private { // Verbindungszeichenfolge erzeugen un zurückgeben return “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + fileName + “;Extended Properties=Excel 8.0“; } /// <summary> /// Erzeugt aus einer Tabelle ein Excel-Dokument. /// </summary> /// <param name=”table”>Tabelle</param> /// <param name=”fileName”>Dateiname des Ziel-Excel-Dokuments</param> public { // Neue leere Excel-Datei aus dem Tabellenschema erzeugen WriteTableSchemaToExcelFile(table, fileName); // Verbindungszeichenfolge erzeugen string connectionString = BuidExcelConnectionString(fileName); // Neue OLEDB-Verbindung erzeugen OleDbConnection connection = new OleDbConnection(connectionString); connection.Open(); // String-Generator für Parameter erzeugen StringBuilder parameterBuilder = new StringBuilder(”) VALUES (“); // Spalten zählen int columnCount=table.Columns.Count; // INSERT SQL-Anweisung für Excel erzeugen StringBuilder builder = new StringBuilder(”INSERT INTO [“); builder.Append(table.TableName); builder.Append(”$] (“); // Alle Spalten durchlaufen for (int i = 0; i < columnCount; i++) { // Spaltennamen anfügen builder.Append(table.Columns[i].ColumnName); // Parameter anfügen parameterBuilder.Append(”?“); // Wenn eine weitere Spalte folgt … if (i < (columnCount - 1)) { // Kommas anfügen builder.Append(”,“); parameterBuilder.Append(”,“); } } // SQL-Anweisung fertigstellen builder.Append(parameterBuilder.ToString()); builder.Append(”)“); string insertStatement = builder.ToString(); // Preisliste durchlaufen foreach (DataRow row in table.Rows) { // Neuen OLEDB-Befehl erzeugen OleDbCommand command = new OleDbCommand(insertStatement, connection); // Alle Spalten durchlaufen foreach(DataColumn column in table.Columns) { // Parameter übergeben command.Parameters.Add(new OleDbParameter(column.ColumnName,row[column])); } // Befehl ausführen command.ExecuteNonQuery(); } // Verbindung schließen connection.Close(); } } } |
