Zum Fußzeileninhalt springen
IRONXL VERWENDEN

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.

Wie IronXL Excel-Zellzustände auf DataTable-Werte abbildet
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
$vbLabelText   $csharpLabel

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.")
$vbLabelText   $csharpLabel

Ü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ändigen DataSet-Zugriff
  • Schreiben Sie DataTable-Inhalte zurück in XLSX, indem Sie DataRow-Werte mit SetCellValue durchlaufen
  • Binden Sie das DataTable an UI-Steuerelemente wie DataGridView mit einer einzigen DataSource-Zuweisung
  • Füttern Sie SqlBulkCopy direkt aus einem DataTable für hochdurchsatzige Datenbankeinträge

Um Ihre IronXL Kenntnisse zu vertiefen, erkunden Sie diese verwandten Themen:

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.

Starten Sie jetzt mit IronXL.
green arrow pointer

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.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an