Excel-Datentabelle in C# exportieren | Excel-Daten konvertieren
Das Exportieren von Excel-Daten in ein DataTable gibt Ihnen strukturierten, speicherinternen Zugriff auf Tabelleninhalte, die natürlich mit Datenbanken, UI-Steuerelementen und LINQ-Abfragen funktionieren. Die umgekehrte Richtung – das Schreiben eines DataTable zurück in eine Excel-Datei – ist ebenso wichtig für die Generierung von Berichten und Datenablauf-Workflows. IronXL verarbeitet beide Richtungen in reinem .NET, ohne Abhängigkeit von Microsoft Office und ohne COM-Interop-Einrichtung.
Installieren Sie IronXL , bevor Sie eines der folgenden Beispiele ausführen:
Install-Package IronXL.Excel
Nach der Installation stellen die WorkBook- und WorkSheet-Typen ToDataTable und ToDataSet-Methoden bereit, die direkt auf System.Data-Strukturen abbilden. Sie können den Prozess auch umkehren, indem Sie DataRow-Werte zurück in ein Arbeitsblatt schreiben und die Datei im XLSX- oder XLS-Format speichern.
Wie wandelt man ein komplettes Arbeitsblatt in eine DataTable um?
Die ToDataTable-Methode konvertiert ein ganzes Arbeitsblatt – oder einen benannten Bereich – in ein System.Data.DataTable. Übergeben Sie true, um die erste Zeile als Spaltenüberschriften zu behandeln, sodass die Spaltennamen der resultierenden Tabelle genau mit den Überschriften Ihrer Tabelle übereinstimmen.
using IronXL;
using System.Data;
// Load the workbook from disk
WorkBook workbook = WorkBook.Load("customers.xlsx");
// Grab the default (first) worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert the entire sheet; first row becomes column headers
DataTable dataTable = worksheet.ToDataTable(true);
// Iterate every row and print each cell value
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
Console.Write(row[i] + "\t");
}
Console.WriteLine();
}
using IronXL;
using System.Data;
// Load the workbook from disk
WorkBook workbook = WorkBook.Load("customers.xlsx");
// Grab the default (first) worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert the entire sheet; first row becomes column headers
DataTable dataTable = worksheet.ToDataTable(true);
// Iterate every row and print each cell value
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
Console.Write(row[i] + "\t");
}
Console.WriteLine();
}
Imports IronXL
Imports System.Data
' Load the workbook from disk
Dim workbook As WorkBook = WorkBook.Load("customers.xlsx")
' Grab the default (first) worksheet
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Convert the entire sheet; first row becomes column headers
Dim dataTable As DataTable = worksheet.ToDataTable(True)
' Iterate every row and print each cell value
For Each row As DataRow In dataTable.Rows
For i As Integer = 0 To dataTable.Columns.Count - 1
Console.Write(row(i) & vbTab)
Next
Console.WriteLine()
Next
Was der Code bewirkt
WorkBook.Load liest die XLSX-Datei ohne jegliche Office-Automatisierung. worksheet.ToDataTable(true) durchläuft jede Zelle im Blatt und ordnet sie einem DataRow zu, wobei die erste Zeile als DataColumn-Namen verwendet wird. Das resultierende DataTable ist ein Standard-System.Data-Objekt – Sie können es an ein DataGridView binden, an ein SqlBulkCopy übergeben oder sofort LINQ-Abfragen darauf ausführen.
Der ToDataTable-Aufruf unterstützt sowohl XLS- als auch XLSX-Formate, sodass derselbe Code für alte Tabellenkalkulationen ohne Anpassungen funktioniert. Die vollständige API-Referenz finden Sie in der IronXL DataTable- und DataSet-Dokumentation .
Wie exportiert man einen bestimmten Zellbereich in eine Datentabelle?
Wenn ein Arbeitsblatt mehrere Datenbereiche enthält oder Sie nur eine Teilmenge von Zeilen und Spalten benötigen, können Sie anstelle des gesamten Blatts einen bestimmten Zellbereich exportieren. Dieser Ansatz ist bei großen Dateien effizienter, da IronXL nur die ausgewählten Zellen verarbeitet.
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access a named worksheet
WorkSheet worksheet = workbook.GetWorkSheet("Summary");
// Select only the region A1:D20 and convert it
DataTable dt = worksheet["A1:D20"].ToDataTable(true);
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}");
foreach (DataRow row in dt.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("financial_report.xlsx");
// Access a named worksheet
WorkSheet worksheet = workbook.GetWorkSheet("Summary");
// Select only the region A1:D20 and convert it
DataTable dt = worksheet["A1:D20"].ToDataTable(true);
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}");
foreach (DataRow row in dt.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
' Access a named worksheet
Dim worksheet As WorkSheet = workbook.GetWorkSheet("Summary")
' Select only the region A1:D20 and convert it
Dim dt As DataTable = worksheet("A1:D20").ToDataTable(True)
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}")
For Each row As DataRow In dt.Rows
For Each item In row.ItemArray
Console.Write(item & vbTab)
Next
Console.WriteLine()
Next
Warum die Wahl des Schießstandes wichtig ist
Die Klammer-Syntax worksheet["A1:D20"] gibt ein IronXL.Range-Objekt zurück. Ein Aufruf von ToDataTable auf diesem Bereich beschränkt die Verarbeitung genau auf diese Zellen, was schnellere Ausführung und einen kleineren Speicherbedarf bedeutet, wenn die Quelldatei Zehntausende von Zeilen enthält.
Sie können auch benannte Bereiche festlegen oder den Bereichsstring dynamisch zur Laufzeit erstellen – zum Beispiel $"A1:D{lastRow}" – was den Ansatz flexibel für Datenexporte mit variabler Länge macht. Die API-Referenz der Range-Klasse dokumentiert alle verfügbaren Auswahl- und Abfragemethoden.
Wie konvertiert man eine Arbeitsmappe mit mehreren Tabellenblättern in ein Dataset?
Arbeitsmappen mit mehreren Blättern werden natürlich auf System.Data.DataSet abgebildet, wobei jedes Blatt zu einem separaten DataTable wird. Die ToDataSet-Methode führt diese Umwandlung in einem einzigen Aufruf aus.
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("multi_sheet.xlsx");
// Each worksheet becomes a DataTable inside the DataSet
DataSet dataSet = workbook.ToDataSet();
foreach (DataTable table in dataSet.Tables)
{
Console.WriteLine($"Sheet: {table.TableName}");
Console.WriteLine($"Rows: {table.Rows.Count}");
Console.WriteLine();
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("multi_sheet.xlsx");
// Each worksheet becomes a DataTable inside the DataSet
DataSet dataSet = workbook.ToDataSet();
foreach (DataTable table in dataSet.Tables)
{
Console.WriteLine($"Sheet: {table.TableName}");
Console.WriteLine($"Rows: {table.Rows.Count}");
Console.WriteLine();
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("multi_sheet.xlsx")
' Each worksheet becomes a DataTable inside the DataSet
Dim dataSet As DataSet = workbook.ToDataSet()
For Each table As DataTable In dataSet.Tables
Console.WriteLine($"Sheet: {table.TableName}")
Console.WriteLine($"Rows: {table.Rows.Count}")
Console.WriteLine()
Next
Zugriff auf Tabellenblätter über den Namen
Jeder DataTable im zurückgegebenen DataSet verwendet den ursprünglichen Blattnamen als seine TableName-Eigenschaft, sodass Sie ein bestimmtes Blatt mit dataSet.Tables["Summary"] abrufen können, anstatt die Sammlung durchzugehen. Dadurch wird es unkompliziert, mehrseitige Berichtslogiken zu erstellen oder Daten aus mehreren Arbeitsblättern zu kombinieren, bevor die Ergebnisse in eine Datenbank geschrieben werden.
Weitere Möglichkeiten zum Arbeiten mit mehreren Tabellenblättern und zum Navigieren in der Arbeitsmappenstruktur finden Sie unter Öffnen und Verwalten von Excel-Arbeitsblättern .
Wie exportiert man eine DataTable zurück in eine Excel-Datei?
Die Importrichtung in DataTable ist nur die halbe Wahrheit. Wenn Sie strukturierte Daten wieder als Tabellenkalkulation schreiben müssen – für Berichte, Downloads oder Archivierung – erstellen Sie eine neue Arbeitsmappe, füllen die Zellen aus dem DataTable und speichern.
using IronXL;
using System.Data;
// Build a sample DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ProductID", typeof(int)));
dt.Columns.Add(new DataColumn("ProductName", typeof(string)));
dt.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));
dt.Rows.Add(1, "Widget Pro", 29.99m);
dt.Rows.Add(2, "Gadget Max", 49.99m);
dt.Rows.Add(3, "Sensor Kit", 14.50m);
// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Write column headers from DataTable.Columns
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
}
}
// Save as XLSX
workbook.SaveAs("products_export.xlsx");
Console.WriteLine("Export complete.");
using IronXL;
using System.Data;
// Build a sample DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ProductID", typeof(int)));
dt.Columns.Add(new DataColumn("ProductName", typeof(string)));
dt.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));
dt.Rows.Add(1, "Widget Pro", 29.99m);
dt.Rows.Add(2, "Gadget Max", 49.99m);
dt.Rows.Add(3, "Sensor Kit", 14.50m);
// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Write column headers from DataTable.Columns
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
}
}
// Save as XLSX
workbook.SaveAs("products_export.xlsx");
Console.WriteLine("Export complete.");
Imports IronXL
Imports System.Data
' Build a sample DataTable
Dim dt As New DataTable()
dt.Columns.Add(New DataColumn("ProductID", GetType(Integer)))
dt.Columns.Add(New DataColumn("ProductName", GetType(String)))
dt.Columns.Add(New DataColumn("UnitPrice", GetType(Decimal)))
dt.Rows.Add(1, "Widget Pro", 29.99D)
dt.Rows.Add(2, "Gadget Max", 49.99D)
dt.Rows.Add(3, "Sensor Kit", 14.50D)
' Create a new workbook and worksheet
Dim workbook As WorkBook = WorkBook.Create()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Products")
' Write column headers from DataTable.Columns
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Next
' Write data rows
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(row + 1, col, dt.Rows(row)(col))
Next
Next
' Save as XLSX
workbook.SaveAs("products_export.xlsx")
Console.WriteLine("Export complete.")
Wie die Zellschreibschleife funktioniert
SetCellValue(rowIndex, columnIndex, value) akzeptiert object-Werte, sodass Sie Spaltennamen für die Kopfzeile und rohe Zellenwerte für die Datenzeilen ohne jegliche Typkonvertierung übergeben. Der Zeilenoffset von row + 1 reserviert Zeile 0 für Überschriften. Die resultierende XLSX-Datei ist eine vollständig gültige Tabellenkalkulation – ohne Platzhalter, ohne temporäre Dateien.
Bei größeren DataTables empfiehlt es sich, die Spaltengrößenanpassung nach dem Schreiben der Daten anzuwenden, damit der Inhalt ohne manuelle Formatierung übersichtlich angezeigt wird.
Wie bindet man eine DataTable an ein DataGridView?
Einer der häufigsten Gründe, ein Excel-Blatt in ein DataTable zu exportieren, ist, es in einem Windows Forms DataGridView anzuzeigen. Sobald Sie ein DataTable haben, ist die Bindung eine einfache Codezeile.
using IronXL;
using System.Data;
using System.Windows.Forms;
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
DataTable dataTable = worksheet.ToDataTable(true);
// Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable;
using IronXL;
using System.Data;
using System.Windows.Forms;
WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
DataTable dataTable = worksheet.ToDataTable(true);
// Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable;
Imports IronXL
Imports System.Data
Imports System.Windows.Forms
Dim workbook As WorkBook = WorkBook.Load("inventory.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim dataTable As DataTable = worksheet.ToDataTable(True)
' Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable
Was geschieht zum Zeitpunkt der Bindung?
Das Setzen von DataSource löst DataGridView aus, um die Spaltennamen und Zeilendaten aus dem DataTable zu lesen. Jeder DataColumn wird zu einer Gitterspalte, und jeder DataRow wird zu einer sichtbaren Zeile. Sie können Sortier-, Filter- und Auswahlfunktionen über die integrierten Steuerelemente des Rasters ohne zusätzlichen Code anwenden.
Dieses Muster funktioniert gleichermaßen gut mit WPF DataGrid, ASP.NET GridView und jeder anderen .NET-Datenbindung-Infrastruktur. Eine Schritt-für-Schritt-Anleitung finden Sie unter "Exportieren eines DataGridView nach Excel" (umgekehrte Richtung).
Wie verwendet man LINQ-Abfragen für eine exportierte DataTable?
Nachdem ein Arbeitsblatt in ein DataTable konvertiert wurde, können Sie LINQ-Abfragen mit der AsEnumerable() Erweiterungsmethode ausführen, die jeden DataRow in ein abfragbares Element transformiert.
using IronXL;
using System.Data;
using System.Linq;
WorkBook workbook = WorkBook.Load("sales.xlsx");
DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
// Filter rows where the "Revenue" column exceeds 10000
var highRevenue = dt.AsEnumerable()
.Where(row => row.Field<double>("Revenue") > 10000)
.OrderByDescending(row => row.Field<double>("Revenue"))
.ToList();
Console.WriteLine($"High-revenue records: {highRevenue.Count}");
foreach (var row in highRevenue)
{
Console.WriteLine($"{row["Product"]}: {row["Revenue"]:C}");
}
using IronXL;
using System.Data;
using System.Linq;
WorkBook workbook = WorkBook.Load("sales.xlsx");
DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);
// Filter rows where the "Revenue" column exceeds 10000
var highRevenue = dt.AsEnumerable()
.Where(row => row.Field<double>("Revenue") > 10000)
.OrderByDescending(row => row.Field<double>("Revenue"))
.ToList();
Console.WriteLine($"High-revenue records: {highRevenue.Count}");
foreach (var row in highRevenue)
{
Console.WriteLine($"{row["Product"]}: {row["Revenue"]:C}");
}
Imports IronXL
Imports System.Data
Imports System.Linq
Dim workbook As WorkBook = WorkBook.Load("sales.xlsx")
Dim dt As DataTable = workbook.DefaultWorkSheet.ToDataTable(True)
' Filter rows where the "Revenue" column exceeds 10000
Dim highRevenue = dt.AsEnumerable() _
.Where(Function(row) row.Field(Of Double)("Revenue") > 10000) _
.OrderByDescending(Function(row) row.Field(Of Double)("Revenue")) _
.ToList()
Console.WriteLine($"High-revenue records: {highRevenue.Count}")
For Each row In highRevenue
Console.WriteLine($"{row("Product")}: {row("Revenue"):C}")
Next
Warum LINQ auf DataTable nützlich ist
LINQ-Abfragen bieten Ihnen eine lesbare, stark typisierte Möglichkeit, Daten aus einem konvertierten Arbeitsblatt zu filtern, zu sortieren, zu gruppieren und zu projizieren. row.Field<t>(columnName) behandelt Typenzwingung sauber, indem es ein InvalidCastException wirft, wenn ein Wert nicht konvertiert werden kann, statt einen stillen Nullwert zurückzugeben. Dadurch lassen sich Probleme mit der Datenqualität leichter frühzeitig erkennen.
Kombinieren Sie diesen Ansatz mit dem bereichsbasierten Export aus dem vorherigen Abschnitt, um bestimmte Tabellenbereiche anstatt ganzer Tabellenblätter abzufragen und so den Speicherverbrauch bei großen Dateien gering zu halten.
Wie geht man beim Export mit Null- und leeren Zellen um?
Excel-Tabellen weisen oft Lücken auf – leere Zellen, verbundene Bereiche oder Platzhaltertext. IronXL ordnet leere Zellen DBNull.Value im exportierten DataTable zu, was dem Standardverhalten von ADO.NET entspricht, sodass Ihr bestehender Code zur Nullwertbehandlung ohne Anpassungen funktioniert.
| Excel-Zellenstatus | DataTable-Wert | Anmerkungen |
|---|---|---|
| Textwert | Zeichenfolge | Zurückgegeben im Ist-Zustand |
| Numerischer Wert | Doppelt oder Dezimal | Hängt vom Zellenformat ab. |
| Datumswert | Datum/Uhrzeit | Aus der Seriennummer extrahiert |
| Boolescher Wert | Boolesche | WAHR/FALSCH in Excel |
| Leere Zelle | DBNull.Value | Standard ADO .NET null |
| Formelzelle | Berechnetes Ergebnis | IronXL wertet zuerst die Formel aus. |
Beim Schreiben eines DataTable zurück in Excel erzeugen DBNull.Value-Felder leere Zellen, wobei die Rundreisetreue erhalten bleibt. Wenn Sie einen Standard-Zeichenfolge für Nullfelder benötigen, ersetzen Sie DBNull.Value durch Ihren Platzhalter, bevor Sie SetCellValue aufrufen.
Weitere Hinweise zur Datenaufbereitung finden Sie in der Dokumentation der DataTable-Klasse von Microsoft, die Themen wie Nullwerte, Constraint-Management und Zeilenzustände ausführlich behandelt.
Wie kann man beim Exportieren großer Arbeitsblätter Speicherplatz sparen?
Bei Arbeitsblättern mit vielen Tausend Zeilen führt der Export des gesamten Blatts auf einmal dazu, dass alle Daten gleichzeitig im Speicher belegt werden. Zwei IronXL Muster reduzieren die maximale Speicherauslastung:
- Bereichsexport: Verwenden Sie
worksheet["A1:D5000"].ToDataTable(true), um eine begrenzte Region statt des gesamten Blatts zu verarbeiten. - Stapelverarbeitung: Berechnen Sie die letzte genutzte Zeile mit
worksheet.RowCount, dann durchlaufen Sie feste Größenbereiche – zum Beispiel 1.000 Zeilen auf einmal – und verarbeiten Sie jeden Stapel, bevor Sie zum nächsten übergehen.
Die Eigenschaften worksheet.RowCount und worksheet.ColumnCount ermöglichen es Ihnen, dynamische Bereichsstrings zu erstellen, ohne die Abmessungen fest zu codieren:
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("large_dataset.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
int batchSize = 1000;
int totalRows = worksheet.RowCount;
for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
int endRow = Math.Min(startRow + batchSize - 1, totalRows);
string rangeAddress = $"A{startRow}:Z{endRow}";
DataTable batch = worksheet[rangeAddress].ToDataTable(false);
// Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}");
}
using IronXL;
using System.Data;
WorkBook workbook = WorkBook.Load("large_dataset.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
int batchSize = 1000;
int totalRows = worksheet.RowCount;
for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
int endRow = Math.Min(startRow + batchSize - 1, totalRows);
string rangeAddress = $"A{startRow}:Z{endRow}";
DataTable batch = worksheet[rangeAddress].ToDataTable(false);
// Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}");
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("large_dataset.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim batchSize As Integer = 1000
Dim totalRows As Integer = worksheet.RowCount
For startRow As Integer = 1 To totalRows Step batchSize
Dim endRow As Integer = Math.Min(startRow + batchSize - 1, totalRows)
Dim rangeAddress As String = $"A{startRow}:Z{endRow}"
Dim batch As DataTable = worksheet(rangeAddress).ToDataTable(False)
' Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}")
Next
Dieses Muster ist insbesondere dann relevant für das Einlesen großer Excel-Dateien in C# , wo Speicherbeschränkungen gelten.
Wie schreibt man eine DataTable in eine Datenbank?
Sobald Sie ein DataTable haben, ist das Einfügen in SQL Server über SqlBulkCopy der schnellste Weg für große Datensätze. SqlBulkCopy akzeptiert ein DataTable direkt und streamt Zeilen in Chargen, ohne einzelne INSERT-Anweisungen zu erstellen.
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connectionZeichenfolge = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connectionZeichenfolge);
connection.Open();
using SqlBulkCopy bulkCopy = new(connection);
bulkCopy.DestinationTableName = "dbo.Orders";
bulkCopy.BatchSize = 500;
bulkCopy.BulkCopyTimeout = 60;
// Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID");
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName");
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount");
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Bulk insert complete.");
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connectionZeichenfolge = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connectionZeichenfolge);
connection.Open();
using SqlBulkCopy bulkCopy = new(connection);
bulkCopy.DestinationTableName = "dbo.Orders";
bulkCopy.BatchSize = 500;
bulkCopy.BulkCopyTimeout = 60;
// Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID");
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName");
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount");
bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Bulk insert complete.");
Imports IronXL
Imports System.Data
Imports Microsoft.Data.SqlClient
Dim workbook As WorkBook = WorkBook.Load("orders.xlsx")
Dim dataTable As DataTable = workbook.DefaultWorkSheet.ToDataTable(True)
Dim connectionZeichenfolge As String = "Server=.;Database=OrdersDB;Trusted_Connection=True;"
Using connection As New SqlConnection(connectionZeichenfolge)
connection.Open()
Using bulkCopy As New SqlBulkCopy(connection)
bulkCopy.DestinationTableName = "dbo.Orders"
bulkCopy.BatchSize = 500
bulkCopy.BulkCopyTimeout = 60
' Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID")
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName")
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount")
bulkCopy.WriteToServer(dataTable)
End Using
End Using
Console.WriteLine("Bulk insert complete.")
Überlegungen zur Spaltenzuordnung
Die ColumnMappings-Sammlung passt DataTable-Spaltennamen an die Datenbankspaltennamen an. Wenn beide Namen identisch sind, können Sie einzelne Zuordnungen weglassen und SqlBulkCopy wird automatisch nach Namen zuordnen. Explizite Zuordnungen sind sicherer, wenn die Spaltenreihenfolge der Tabellenkalkulation vom Datenbankschema abweicht.
Weitere Informationen zur Kombination von IronXL mit Datenbank-Workflows finden Sie im C# Excel-Importleitfaden , der zusätzliche Importszenarien einschließlich der Validierung vor dem Einfügen behandelt.
Für auf Entity Framework basierende Projekte, konvertieren Sie Ihre DataTable-Zeilen zuerst in typisierte Modellobjekte, dann verwenden Sie DbContext.BulkInsert aus einer Bibliothek wie EFCore.BulkExtensions für ORM-bewusste Chargen-Einfügung. Die Dokumentation zu Microsoft SqlBulkCopy erläutert die Stapelverarbeitungsoptionen und die Transaktionsunterstützung im Detail.
Was sind Ihre nächsten Schritte?
Sie haben jetzt einen vollständigen Werkzeugkasten, um Daten in beide Richtungen zwischen Excel und DataTable mit IronXL zu verschieben:
- Konvertieren Sie ein vollständiges Arbeitsblatt mit
worksheet.ToDataTable(true)für header-bewusste Exporte - Exportieren Sie einen bestimmten Zellbereich mit der
worksheet["A1:D20"].ToDataTable(true)-Syntax - Konvertieren Sie Mehrblatt-Workbooks mit
workbook.ToDataSet()für vollständigenDataSet-Zugriff - Schreiben Sie
DataTable-Inhalte zurück in XLSX, indem SieDataRow-Werte mitSetCellValuedurchlaufen - Binden Sie das
DataTablean UI-Steuerelemente wieDataGridViewmit einer einzigenDataSource-Zuweisung - Füttern Sie
SqlBulkCopydirekt aus einemDataTablefür hochdurchsatzige Datenbankeinträge
Um Ihre IronXL Kenntnisse zu vertiefen, erkunden Sie diese verwandten Themen:
- DataSet und DataTable exportieren – vollständige API-Referenz
- Excel-Tabellen in C# ohne OleDb in DataTable konvertieren
- Tutorial zum Exportieren von DataTables aus C#-Tabellen nach Excel
- Exportieren einer Datentabelle nach Excel aus ASP.NET
- Schnellster Weg, eine DataTable nach Excel zu exportieren
- Excel-Dateien in C# laden und lesen
- Exportieren von Excel-Dateien mit Formatierung
- Excel-Dateien in C# lesen – Best Practices
- Auswahl und Bearbeitung von Excel-Bereichen mit C#
- Importieren von Excel-Daten in eine C#-Anwendung
Beginnen Sie mit einer kostenlosen IronXL Testlizenz , um diese Beispiele in Ihren eigenen Projekten auszuführen. Wenn Sie bereit sind, das Produkt einzusetzen, erwerben Sie eine Produktionslizenz oder wenden Sie sich an das Team, um Unterstützung bei der Lizenzierung zu erhalten.
Häufig gestellte Fragen
Wie kann ich Excel-Daten in eine DataTable in C# mit IronXL exportieren?
Sie können Excel-Daten in C# mit IronXL in eine DataTable exportieren, indem Sie die Excel-Datei in IronXL laden, das Arbeitsblatt oder den Bereich auswählen und dann die ExportToDataTable-Methode verwenden, um die Daten in ein DataTable-Objekt zu konvertieren.
Welche Vorteile bietet die Konvertierung von Excel-Daten in eine DataTable?
Die Konvertierung von Excel-Daten in eine DataTable liefert strukturierte Daten, die sich ideal für Datenbankoperationen, die Datenbindung an UI-Steuerelemente und die nahtlose .NET Integration eignen. Sie erleichtert zudem die einfache Bearbeitung und Verarbeitung von Daten in C#-Anwendungen.
Kann IronXL sowohl den Import als auch den Export von Daten zwischen Excel und DataTable verarbeiten?
Ja, IronXL bewältigt sowohl den Import von Daten aus Excel in eine DataTable als auch den Export von Daten aus einer DataTable nach Excel effizient und ist somit ein vielseitiges Werkzeug für die Verwaltung des Datenaustauschs in C#-Anwendungen.
Ist es mit IronXL möglich, bestimmte Bereiche innerhalb einer Excel-Tabelle in eine DataTable umzuwandeln?
Ja, IronXL ermöglicht es Ihnen, bestimmte Bereiche innerhalb einer Excel-Tabelle auszuwählen und in eine DataTable umzuwandeln, was Ihnen Flexibilität bei der Datenmanipulation und -extraktion bietet.
Muss Microsoft Office installiert sein, um IronXL für die Excel-Datenkonvertierung zu verwenden?
Nein, Sie benötigen Microsoft Office nicht auf Ihrem Rechner, um IronXL zum Konvertieren von Excel-Daten in DataTables oder umgekehrt zu verwenden. IronXL funktioniert unabhängig von Microsoft Office.
Welche Datentypen können mit IronXL von Excel in DataTable konvertiert werden?
IronXL kann verschiedene Datentypen aus Excel konvertieren, darunter Zahlen, Text, Datumsangaben und Formeln, und dabei die Datenintegrität und -struktur erhalten.
Kann IronXL eine DataTable wieder in eine Excel-Datei exportieren?
Ja, IronXL kann eine DataTable zurück in eine Excel-Datei exportieren, sodass Sie Berichte generieren oder Datenspeicherlösungen direkt aus Ihren C#-Anwendungen erstellen können.




