使用 C# 匯出 Excel 資料表 | 轉換 Excel 數據
將 Excel 資料匯出至 DataTable 讓您以結構化的方式在記憶體中存取電子表格內容,從而自然地與資料庫、UI 控制項和 LINQ 查詢搭配使用。 反向操作-將 DataTable 寫回 Excel 檔案-對於報表產生和資料儲存工作流程同樣重要。 IronXL 採用純 .NET 架構處理雙向轉換,無需依賴 Microsoft Office,亦無需進行 COM 互通設定。
在執行以下任何範例之前,請先安裝 IronXL:
Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
安裝完成後,WorkBook 和 WorkSheet 類型會公開 ToDataTable 和 ToDataSet 方法,這些方法可以直接對應到 @@--CODE-99905--@ --@@ 方法結構。 您也可以將 DataRow 值寫回工作表並將檔案儲存為 XLSX 或 XLS 格式來逆轉此過程。
如何將整個工作表轉換為 DataTable?
ToDataTable 方法將整個工作表或命名區域轉換為 System.Data.DataTable。 傳遞 true 將第一行視為列標題,這樣產生的表格的列名就與電子表格的標題完全匹配。
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
程式碼的功能
WorkBook.Load 無需任何 Office 自動化即可讀取 XLSX 檔案。 worksheet.ToDataTable(true) 遍歷工作表中的每個單元格,並將其對應到 DataRow,使用第一行作為 DataColumn 名稱。 產生的 DataTable 是一個標準的 System.Data 物件 -- 您可以將其綁定到 DataGridView,將其傳遞給 SqlBulkCopy,或立即對其執行 LINQ 查詢。
ToDataTable 呼叫同時支援 XLS 和 XLSX 格式,因此相同的程式碼無需修改即可用於舊版電子表格。 請參閱 IronXL DataTable 和 DataSet 的文件以獲取完整的 API 參考。
如何將特定的儲存格範圍匯出至 DataTable?
當工作表包含多個資料區塊,或您僅需部分列與列時,您可以匯出特定的儲存格範圍,而非整個工作表。 對於大型檔案,此方法更為高效,因為 IronXL 僅處理選取的儲存格。
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
為何範圍選取至關重要
方括號語法 worksheet["A1:D20"] 傳回一個 IronXL.Range 物件。 對該範圍呼叫 ToDataTable 可將處理限制在這些儲存格內,這表示當來源檔案有數萬行時,執行速度更快,記憶體佔用更小。
您也可以指定命名範圍,或在執行時間動態建置範圍字串—例如,$"A1:D{lastRow}"—使此方法能夠靈活地匯出可變長度的資料。 Range 類別的 API 參考文件記載了所有可用的選取與查詢方法。
如何將多工作表工作簿轉換為 DataSet?
具有多個工作表的日記本自然地映射到 System.Data.DataSet,其中每個工作表都成為一個單獨的 DataTable。 ToDataSet 方法只需一次呼叫即可完成此轉換。
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
透過名稱存取試算表
傳回的每個 DataTable 都使用原始工作表名稱作為其 TableName 屬性,因此您可以使用 dataSet.Tables["Summary"] 檢索特定工作表,而無需遍歷集合。 這使得建立多工作表的報表邏輯,或在將結果寫入資料庫前整合多個工作表的資料,變得輕而易舉。
如需瞭解更多關於處理多個工作表及導航工作簿結構的方法,請參閱如何開啟與管理 Excel 工作表。
如何將 DataTable 匯出回 Excel 檔案?
將資料匯入 DataTable 僅是其中一半的過程。 當您需要將結構化資料寫回電子表格時(用於報表、下載或存檔),您可以建立新的工作簿,從 DataTable 填入儲存格,然後儲存。
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.")
Cell-Writing 迴圈的運作原理
SetCellValue(rowIndex, columnIndex, value) 接受 object 值,因此您可以傳遞標題行的列名和資料行的原始儲存格值,而無需任何類型轉換。 row + 1 的行偏移量為第 0 行保留標題。 生成的 XLSX 檔案是一個完全有效的試算表——不含任何佔位符,亦無臨時檔案。
對於較大的 DataTables,建議在寫入資料後啟用欄位自動調整大小功能,如此一來內容便能清晰顯示,無需手動格式化。
如何將 DataTable 綁定至 DataGridView?
將 Excel 表格匯出到 DataTable 的最常見原因之一是將其顯示在 Windows 窗體 DataGridView 中。 一旦你有了 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;
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
綁定時會發生什麼
設定 DataSource 會觸發 DataGridView 從 DataTable 讀取列名和行資料。 每個 DataColumn 都變成網格列,每個 DataRow 都變成可見行。 您無需額外編寫程式碼,即可透過網格的內建控制項來執行排序、篩選及選取操作。
此模式同樣適用於 WPF DataGrid、ASP.NET GridView 和任何其他 .NET 資料綁定基礎架構。 如需逐步操作指南,請參閱如何將 DataGridView 匯出至 Excel(反向操作)。
如何在匯出的 DataTable 上使用 LINQ 查詢?
將工作表轉換為 DataTable 後,您可以使用 AsEnumerable() 擴充方法執行 LINQ 查詢,該方法將每個 DataRow 轉換為可查詢元素。
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
為何在 DataTable 上使用 LINQ 很有用
LINQ 查詢提供了一種易於閱讀且強類型化的方式,可對轉換後的試算表中的資料進行篩選、排序、分組及投影。 row.Field<t>(columnName) 能夠乾淨俐落地處理類型強制轉換,如果值無法轉換,則會拋出 InvalidCastException 異常,而不是傳回靜默的 null。 這有助於及早發現資料品質問題。
將此方法與前一節所述的"範圍導出"功能結合,以查詢特定工作表區域而非整個工作表,從而降低大型檔案的記憶體使用量。
在匯出過程中,您如何處理空值與空儲存格?
Excel 試算表中常會出現空白處——例如空格、合併區域或佔位文字。 IronXL 將空白儲存格對應到匯出的 DataTable 中的 DBNull.Value,與標準的 ADO.NET 行為相匹配,因此您現有的空處理程式碼無需修改即可運作。
| Excel 儲存格狀態 | DataTable 值 | 注意事項 |
|---|---|---|
| 文字內容 | 細繩 | 原樣保留 |
| 數值 | Double 或 Decimal | 取決於儲存格格式 |
| 日期值 | 日期時間 | 從序列號解析 |
| 布林值 | 布林值 | Excel 中的 TRUE/FALSE |
| 空儲存格 | DBNull.Value | 標準 ADO.NET null |
| 公式儲存格 | 計算結果 | IronXL 會先評估公式 |
當將 DataTable 寫回 Excel 時,DBNull.Value 欄位會產生空白儲存格,從而保持往返的準確性。 如果您需要為空字段設定預設字串,請在呼叫 SetCellValue 之前,將 DBNull.Value 替換為您的佔位符。
如需進一步的資料準備指引,請參閱 Microsoft 的 DataTable 類別文件,其中深入探討了 null 值處理、限制管理及資料列狀態等內容。
匯出大型工作表時,該如何節省記憶體?
對於擁有數千行資料的試算表,若一次匯出整個試算表,將導致所有資料同時被分配至記憶體中。 IronXL 的兩種模式可降低記憶體使用量的峰值:
-範圍匯出:使用 worksheet["A1:D5000"].ToDataTable(true) 處理有界區域而不是整個工作表。
-批次處理:使用 worksheet.RowCount 計算最後使用的行,然後循環處理固定大小的範圍(例如一次 1,000 行),並在處理完每個批次後再進行下一個批次。
worksheet.RowCount 和 worksheet.ColumnCount 屬性可讓您建立動態範圍字串,而無需硬編碼維度:
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
此模式特別適用於在 C# 中讀取大型 Excel 檔案,且受記憶體限制的情境。
如何將 DataTable 寫入資料庫?
一旦你有了 DataTable,透過 SqlBulkCopy 將其插入 SQL Server 是處理大型資料集的最快途徑。 SqlBulkCopy 直接接受 DataTable 並批次處理行,而無需建立單獨的 INSERT 語句。
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connection細繩 = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connection細繩);
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 connection細繩 = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connection細繩);
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 connection細繩 As String = "Server=.;Database=OrdersDB;Trusted_Connection=True;"
Using connection As New SqlConnection(connection細繩)
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.")
欄位對應注意事項
ColumnMappings 集合將 DataTable 列名與資料庫列名相符。 如果兩個名稱相同,則可以省略個別映射,SqlBulkCopy 將按名稱自動匹配。 當試算表的欄位順序與資料庫結構不同時,採用明確的對應關係會更為安全。
若需進一步了解如何將 IronXL 與資料庫工作流程結合,請參閱 C# Excel 匯入指南,其中涵蓋了包括插入前驗證在內的其他匯入情境。
對於基於 Entity Framework 的項目,請先將 DataTable 行轉換為類型化的模型對象,然後使用EFCore.BulkExtensions等庫中的 DbContext.BulkInsert 進行 ORM 感知的批次插入。 微軟的 SqlBulkCopy 文件詳細說明了批次處理選項及對事務的支援。
下一步計劃是什麼?
現在,您可以使用 IronXL 在 Excel 和 DataTable 之間雙向傳輸數據,擁有一套完整的工具包:
- 使用
worksheet.ToDataTable(true)轉換整個工作表,以便匯出標題的文檔 - 使用
worksheet["A1:D20"].ToDataTable(true)語法匯出特定儲存格區域 - 使用
workbook.ToDataSet()轉換多工作表工作簿,以獲得完整的DataSet存取權限 - 透過迭代
DataRow的值,將SetCellValue的內容寫回 XLSX - 將
DataTable綁定到 UI 控件,例如DataGridView,只需使用一個DataSource賦值即可。 - 直接從
DataTable取得SqlBulkCopy,以實現高吞吐量的資料庫插入
若要深化您的 IronXL 技能,請探索以下相關主題:
- 匯出 DataSet 和 DataTable -- 完整 API 參考
- 在 C# 中不使用 OleDb 將 Excel 轉換為 DataTable
- C# DataTable 匯出至 Excel 教學
- 從 ASP.NET 將 DataTable 匯出至 Excel
- 將 DataTable 匯出至 Excel 的最快方法
- 在 C# 中載入並讀取 Excel 檔案
- 帶格式匯出 Excel 檔案
- 使用 C# 讀取 Excel 檔案 -- 最佳實務
- C# Excel 範圍選取與操作
- 將 Excel 資料匯入 C# 應用程式
立即申請免費的 IronXL 試用授權,將這些範例應用於您的專案中。 當您準備部署時,請購買正式授權,或透過線上聊天向團隊諮詢授權相關指引。
!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--
常見問題解答
如何使用 IronXL 在 C# 中將 Excel 資料匯出至 DataTable?
您可以在 C# 中使用 IronXL 將 Excel 資料匯出至 DataTable:首先將 Excel 檔案載入 IronXL,選取工作表或範圍,然後使用 ExportToDataTable 方法將資料轉換為 DataTable 物件。
將 Excel 資料轉換為 DataTable 有什麼好處?
將 Excel 資料轉換為 DataTable 可提供結構化資料,非常適合用於資料庫操作、與 UI 控制項進行資料綁定,以及與 .NET 無縫整合。這也便於在 C# 應用程式中輕鬆操作和處理資料。
IronXL 能否同時處理 Excel 與 DataTable 之間的資料匯入與匯出?
是的,IronXL 能高效處理將資料從 Excel 匯入 DataTable,以及將資料從 DataTable 匯出至 Excel 的作業,使其成為管理 C# 應用程式中資料交換的萬用工具。
是否可以使用 IronXL 將 Excel 工作表中的特定範圍轉換為 DataTable?
是的,IronXL 允許您選取 Excel 試算表中的特定範圍,並將其轉換為 DataTable,讓您在資料處理與擷取方面擁有更大的靈活性。
使用 IronXL 進行 Excel 資料轉換時,是否需要安裝 Microsoft Office?
不,您無需在電腦上安裝 Microsoft Office 即可使用 IronXL 將 Excel 資料轉換為 DataTable,或反之亦然。IronXL 的運作與 Microsoft Office 完全獨立。
使用 IronXL 可以將哪些類型的資料從 Excel 轉換為 DataTable?
IronXL 能將 Excel 中的各類資料(包括數字、文字、日期及公式)轉換為 DataTable 格式,同時保留資料的完整性與結構。
IronXL 能否將 DataTable 匯出回 Excel 檔案?
是的,IronXL 能夠將 DataTable 匯出回 Excel 檔案,讓您能直接從 C# 應用程式生成報表或建立資料儲存解決方案。


