using IronXL 在 C# 中將 SQL 資料匯出到 Excel
從SQL Server匯出資料到Microsoft Excel是.NET開發人員在建立報告系統、資料分析工具和商務應用程式時的常見任務。 本教程向您展示如何使用C#和IronXL將SQL資料匯出到Excel,這是一個.NET Excel程式庫,處理整個過程而不需要安裝Microsoft Office。
開始您的免費試用以便跟隨下面的程式碼範例。
如何安裝IronXL以匯出SQL資料?
在編寫任何程式碼之前,您需要將IronXL新增到您的專案中。 最快的方法是通過Visual Studio中的NuGet套件管理器控制台:
Install-Package IronXL.Excel
或者,使用.NET CLI:
dotnet add package IronXL.Excel
安裝之後,在文件頂部新增所需的命名空間。使用.NET 10的頂級語句,您的設置如下所示:
using IronXL;
using System.Data;
using System.Data.SqlClient;
using IronXL;
using System.Data;
using System.Data.SqlClient;
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
IronXL針對.NET Standard 2.0及以上版本,因此可用於.NET 10、.NET Framework、ASP.NET Core和Blazor專案,無需額外配置。 您可以在NuGet上找到該套件。
從SQL Server資料庫匯出資料的最佳方式是什麼?
從SQL Server到Excel文件的匯出資料的最有效方法涉及三個步驟:建立資料庫連接、將資料檢索到DataTable中,然後使用IronXL將資料寫入Excel工作表。 與Microsoft互操作解決方案不同,IronXL獨立運行,處理大型資料集而不會因COM互操作開銷而造成性能瓶頸。
核心模式很簡單。 SqlDataAdapter是Microsoft的ADO.NET資料存取框架的一部分,自.NET 1.0以來一直是從關聯資料庫填充DataTable物件的標準方式:
- 使用連接字串打開
SqlConnection - 使用
DataSet - 調用IronXL方法來建立工作簿並填充工作表單元格
- 將工作簿保存為
.xls
此方法相容SQL Server 2012及更高版本,以及Azure SQL Database、Amazon RDS for SQL Server和任何支持ADO.NET的資料源。 無論您是否在使用控制台應用程式還是基於Web的報告工具,該模式都是適用的。
如何連接到SQL Server並檢索資料?
在您可以匯出SQL資料之前,您需要建立連接並執行SQL查詢以填充DataTable。 連接字串包含存取資料所需的SQL Server資料庫憑據和伺服器資訊。
以下範例查詢否rthwind Customers表,並使用IronXL的單元格寫入API將每行寫入Excel工作表:
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Data Source=localhost;Initial Catalog=否rthwind;Integrated Security=True";
string sql = "SELECT * FROM Customers";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
DataTable dt = new DataTable();
adapter.Fill(dt);
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Customers");
// Write column headers
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].ToString());
}
}
workBook.SaveAs("CustomerExport.xlsx");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Data Source=localhost;Initial Catalog=否rthwind;Integrated Security=True";
string sql = "SELECT * FROM Customers";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
DataTable dt = new DataTable();
adapter.Fill(dt);
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Customers");
// Write column headers
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].ToString());
}
}
workBook.SaveAs("CustomerExport.xlsx");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
Dim connectionString As String = "Data Source=localhost;Initial Catalog=否rthwind;Integrated Security=True"
Dim sql As String = "SELECT * FROM Customers"
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim adapter As New SqlDataAdapter(sql, connection)
Dim dt As New DataTable()
adapter.Fill(dt)
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Customers")
' Write column headers
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).ToString())
Next
Next
workBook.SaveAs("CustomerExport.xlsx")
End Using
輸出

此程式碼通過您的SQL Server表結構建立格式正確的列標題的Excel文件。 DataTable dt儲存查詢結果,然後系統地使用零位的行和列索引寫入到每個單元格中。 IronXL支持.xlsx格式,以便廣泛相容Microsoft Office應用程式。
如果您的SQL表包含SetCellValue之前適當地轉換單元格值。 直接傳遞數字型別可保留Excel資料型別,並啟用排序和公式計算在匯出列上。
如何使用LoadWorkSheetsFromDataSet匯出多個表?
當您的報告需要來自多個SQL表的資料時 -- 例如產品和類別 -- 您可以將它們載入到DataSet中,並讓IronXL自動為每個表建立一個工作表。 這是將DataSet或DataTable匯出到Excel的最簡化方法。
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlDataAdapter productsAdapter = new SqlDataAdapter("SELECT * FROM Products", connection);
SqlDataAdapter categoriesAdapter = new SqlDataAdapter("SELECT * FROM Categories", connection);
DataSet dataSet = new DataSet();
productsAdapter.Fill(dataSet, "Products");
categoriesAdapter.Fill(dataSet, "Categories");
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
workBook.SaveAs("InventoryReport.xlsx");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlDataAdapter productsAdapter = new SqlDataAdapter("SELECT * FROM Products", connection);
SqlDataAdapter categoriesAdapter = new SqlDataAdapter("SELECT * FROM Categories", connection);
DataSet dataSet = new DataSet();
productsAdapter.Fill(dataSet, "Products");
categoriesAdapter.Fill(dataSet, "Categories");
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
workBook.SaveAs("InventoryReport.xlsx");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
Dim connectionString As String = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim productsAdapter As New SqlDataAdapter("SELECT * FROM Products", connection)
Dim categoriesAdapter As New SqlDataAdapter("SELECT * FROM Categories", connection)
Dim dataSet As New DataSet()
productsAdapter.Fill(dataSet, "Products")
categoriesAdapter.Fill(dataSet, "Categories")
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook)
workBook.SaveAs("InventoryReport.xlsx")
End Using
輸出

DataTable中的每一項,並建立一個匹配的工作表頁簽。 來自DataTable的列名成為每張工作表中的標題行。 此方法特別適用於返回多個結果集的儲存過程,因為您可以使用多次SqlDataAdapter,然後一步匯出所有內容。
對於需要程式化建立Excel文件和自訂格式化的應用程式,您還可以在調用LoadWorkSheetsFromDataSet之後存取獨立的工作表,並在保存之前套用樣式、列寬或公式。
如何使用ASP.NET的匯出按鈕匯出資料?
對於Web應用程式,通常是在使用者點擊按鈕時觸發匯出。 以下ASP.NET Web Forms範例顯示了如何處理按鈕點擊事件,從SQL查詢構建Excel工作簿,並使用Response.AddHeader將文件推送到瀏覽器下載:
using IronXL;
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web.UI;
public partial class ExportPage : Page
{
private void ExportButton_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Orders", connection);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
byte[] fileBytes = workBook.ToByteArray();
string filename = "OrdersExport.xlsx";
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + filename);
Response.BinaryWrite(fileBytes);
Response.End();
}
}
using IronXL;
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web.UI;
public partial class ExportPage : Page
{
private void ExportButton_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Orders", connection);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
byte[] fileBytes = workBook.ToByteArray();
string filename = "OrdersExport.xlsx";
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + filename);
Response.BinaryWrite(fileBytes);
Response.End();
}
}
Imports IronXL
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web.UI
Public Partial Class ExportPage
Inherits Page
Private Sub ExportButton_Click(sender As Object, e As EventArgs)
Dim connectionString As String = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter("SELECT * FROM Orders", connection)
Dim dataSet As New DataSet()
adapter.Fill(dataSet)
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook)
Dim fileBytes As Byte() = workBook.ToByteArray()
Dim filename As String = "OrdersExport.xlsx"
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("content-disposition", "attachment;filename=" & filename)
Response.BinaryWrite(fileBytes)
Response.End()
End Using
End Sub
End Class
範例匯出按鈕

輸出

ToByteArray()方法將整個工作簿轉換為記憶體中的位元組陣列,然後您可以直接寫入HTTP響應流。 這樣可以避免將臨時文件寫入磁碟。 與需要object misValue佔位符和伺服器上需要安裝Office的Microsoft互操作不同,IronXL完全在受託管理的程式碼中運行,沒有外部依賴。
對於ASP.NET Core和Razor Pages專案,將return File(fileBytes, contentType, filename)。 ASP.NET Core匯出到Excel的模式遵循了相同的工作簿到位元組陣列的方法。
如何為匯出的Excel文件新增格式和列標題?
原始SQL匯出通常需要在與最終使用者分享之前進行展示改進。 IronXL使您能夠控制單元格樣式、列寬和數字格式,資料寫入工作表之後。 以下範例演示了如何加粗標題行並自動調整列寬:
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate, Total FROM Orders", connection);
DataTable dt = new DataTable();
adapter.Fill(dt);
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Orders");
// Write and style header row
for (int col = 0; col < dt.Columns.Count; col++)
{
workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
workSheet[0, col].Style.Font.Bold = true;
workSheet[0, col].Style.Font.Height = 12;
}
// Write data rows with type-aware value assignment
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
object value = dt.Rows[row][col];
if (value is DateTime date)
workSheet.SetCellValue(row + 1, col, date.ToString("yyyy-MM-dd"));
else if (value is decimal || value is double || value is int)
workSheet.SetCellValue(row + 1, col, Convert.ToDouble(value));
else
workSheet.SetCellValue(row + 1, col, value.ToString());
}
}
workBook.SaveAs("FormattedOrdersExport.xlsx");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate, Total FROM Orders", connection);
DataTable dt = new DataTable();
adapter.Fill(dt);
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Orders");
// Write and style header row
for (int col = 0; col < dt.Columns.Count; col++)
{
workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
workSheet[0, col].Style.Font.Bold = true;
workSheet[0, col].Style.Font.Height = 12;
}
// Write data rows with type-aware value assignment
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
object value = dt.Rows[row][col];
if (value is DateTime date)
workSheet.SetCellValue(row + 1, col, date.ToString("yyyy-MM-dd"));
else if (value is decimal || value is double || value is int)
workSheet.SetCellValue(row + 1, col, Convert.ToDouble(value));
else
workSheet.SetCellValue(row + 1, col, value.ToString());
}
}
workBook.SaveAs("FormattedOrdersExport.xlsx");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
Dim connectionString As String = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim adapter As New SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate, Total FROM Orders", connection)
Dim dt As New DataTable()
adapter.Fill(dt)
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Orders")
' Write and style header row
For col As Integer = 0 To dt.Columns.Count - 1
workSheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
workSheet(0, col).Style.Font.Bold = True
workSheet(0, col).Style.Font.Height = 12
Next
' Write data rows with type-aware value assignment
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
Dim value As Object = dt.Rows(row)(col)
If TypeOf value Is DateTime Then
Dim dateValue As DateTime = CType(value, DateTime)
workSheet.SetCellValue(row + 1, col, dateValue.ToString("yyyy-MM-dd"))
ElseIf TypeOf value Is Decimal OrElse TypeOf value Is Double OrElse TypeOf value Is Integer Then
workSheet.SetCellValue(row + 1, col, Convert.ToDouble(value))
Else
workSheet.SetCellValue(row + 1, col, value.ToString())
End If
Next
Next
workBook.SaveAs("FormattedOrdersExport.xlsx")
End Using
使用粗體文字和較大字體樣式標題行,使得匯出的報告在Excel中更易於閱讀。 對於總計或計數等數字列,傳遞double值而不是字串,能夠使Excel的原生排序和聚合功能在匯出的資料上正常運行。
您可以在IronXL單元格格式化文件中查看全部格式選項範圍--包括單元格邊框、背景色和數字格式模板。
如何高效處理大型SQL資料集?
對於包含數萬行的表,記憶體管理變得重要。 將整個結果集載入到SqlDataReader。
在處理大容量匯出時,考慮以下策略:
- 使用SQL OFFSET/FETCH進行分頁:將大型匯出拆分為多個工作表,每個工作表包含一個結果頁。 這確保了Excel中的個別工作表大小可管理。
- 流向磁碟:在每個批次後調用
ToByteArray()將全部保留在記憶體中。 - 限制選中的列:在您的
SELECT *,以減少從SQL Server傳輸的資料量。
有關如何最快方式將DataTable匯出到Excel的指導,IronXL部落格有一篇專門的基準文章,比較不同的方法及其記憶體配置文件。
DataSet物件,因為它能內部處理行的迭代。 對於DataTable到Excel的匯出場景,此方法減少了樣板程式碼,並已針對批量寫入進行了優化。
如何將資料從Excel導入回SQL Server?
資料匯出工作流程只是許多報告應用程式的一半。 您可能還需要允許使用者下載模板,填寫資料,然後再上傳至SQL Server。 IronXL使這種雙向工作流程變得簡單。
要將Excel資料匯入資料庫,使用SqlCommand插入每一行:
using IronXL;
using System.Data.SqlClient;
WorkBook workBook = WorkBook.Load("UploadedData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
string connectionString = "Data Source=localhost;Initial Catalog=Inventory;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
// Skip header row, start at row index 1
for (int row = 1; row <= sheet.RowCount; row++)
{
string productName = sheet[row, 0].StringValue;
int quantity = (int)sheet[row, 1].DoubleValue;
decimal price = (decimal)sheet[row, 2].DoubleValue;
using SqlCommand cmd = new SqlCommand(
"INSERT INTO Products (Name, Quantity, Price) VALUES (@name, @qty, @price)",
connection);
cmd.Parameters.AddWithValue("@name", productName);
cmd.Parameters.AddWithValue("@qty", quantity);
cmd.Parameters.AddWithValue("@price", price);
cmd.ExecuteNonQuery();
}
using IronXL;
using System.Data.SqlClient;
WorkBook workBook = WorkBook.Load("UploadedData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
string connectionString = "Data Source=localhost;Initial Catalog=Inventory;Integrated Security=True";
using SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
// Skip header row, start at row index 1
for (int row = 1; row <= sheet.RowCount; row++)
{
string productName = sheet[row, 0].StringValue;
int quantity = (int)sheet[row, 1].DoubleValue;
decimal price = (decimal)sheet[row, 2].DoubleValue;
using SqlCommand cmd = new SqlCommand(
"INSERT INTO Products (Name, Quantity, Price) VALUES (@name, @qty, @price)",
connection);
cmd.Parameters.AddWithValue("@name", productName);
cmd.Parameters.AddWithValue("@qty", quantity);
cmd.Parameters.AddWithValue("@price", price);
cmd.ExecuteNonQuery();
}
Imports IronXL
Imports System.Data.SqlClient
Dim workBook As WorkBook = WorkBook.Load("UploadedData.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
Dim connectionString As String = "Data Source=localhost;Initial Catalog=Inventory;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
connection.Open()
' Skip header row, start at row index 1
For row As Integer = 1 To sheet.RowCount
Dim productName As String = sheet(row, 0).StringValue
Dim quantity As Integer = CInt(sheet(row, 1).DoubleValue)
Dim price As Decimal = CDec(sheet(row, 2).DoubleValue)
Using cmd As New SqlCommand("INSERT INTO Products (Name, Quantity, Price) VALUES (@name, @qty, @price)", connection)
cmd.Parameters.AddWithValue("@name", productName)
cmd.Parameters.AddWithValue("@qty", quantity)
cmd.Parameters.AddWithValue("@price", price)
cmd.ExecuteNonQuery()
End Using
Next
End Using
參數化的查詢在讀取使用者提供的Excel資料時防止SQL注入。 Microsoft Learn上的SqlCommand文件涵蓋了所有可用的重載和參數綁定模式。 在插入之前始終驗證單元格值 - 檢查空字串、超出範圍的數字和可能導致SQL Server表約束違反的意外資料型別。
對於反方向,IronXL還支持在C#中讀取CSV文件,用於資料源生成逗號分隔輸出的場景,而不是.xlsx文件。
如何比較IronXL與其他匯出方法?
在.NET中匯出SQL資料到Excel有多種方法。 下表總結了主要的取捨:
| 方法 | 需要Office | DataSet支持 | 格式化 | 伺服器安全 |
|---|---|---|---|---|
| IronXL | 否 | 是(內建) | 全方位樣式、公式 | 是 |
| Microsoft互操作 | 是 | 手動迭代 | 通過COM全方位 | 不(需要COM伺服器) |
| EPPlus | 否 | 手動迭代 | 廣泛 | 是 |
| NPOI | 否 | 手動迭代 | 良好 | 是 |
| CSV輸出 | 否 | 手動 | 否ne | 是 |
Microsoft互操作要求在伺服器上安裝Office,不支持伺服器端的Web應用。 IronXL,EPPlus,和NPOI都可在不需要Office的情況下工作。IronXL的優勢在於其一流的LoadWorkSheetsFromDataSet進行,這將匯出程式碼減少到幾行,與其他庫中的手動行迭代相比。
有關詳盡的對比分析,請參見Microsoft Office Interop替代方案文章。
您接下來的步驟是什麼?
使用C#將SQL資料匯出到Excel變得簡單直觀,使用IronXL。 該程式庫消除了複雜的Interop依賴,同時為DataSet及直接的資料庫整合提供了強大的支援。 無論是構建控制台應用程式還是具有文件下載功能的基於Web的報告系統,IronXL在.NET 10所有專案型別中提供可靠的Excel文件生成。
若想在此基礎上繼續構建,請探索以下相關資源:
- 在C#中建立Excel文件 -- 關於工作簿建立和格式化的完整教程
- 將DataSet和DataTable匯出到Excel --
LoadWorkSheetsFromDataSet方法的官方指南 - 從Excel匯入資料到SQL -- 完整的雙向流程
- DataTable到Excel的匯出 -- 專注於單表場景的指南
- ASP.NET匯出DataTable到Excel -- 網頁應用匯出模式
- 最快速地將DataTable匯出到Excel -- 性能基準
常見問題
如何使用C#將SQL資料匯出到Excel?
您可以使用C#和IronXL將SQL資料匯出到Excel。使用SqlConnection和SqlDataAdapter連接到SQL Server,填寫DataTable,然後使用IronXL建立工作簿並寫入資料行。IronXL不需要安裝Microsoft Office。
使用IronXL匯出SQL資料的先決條件是什麼?
要使用IronXL匯出SQL資料,您需要一個.NET專案(Framework、Core或.NET 10+)、存取SQL Server資料庫,並透過Install-Package IronXL.Excel安裝IronXL NuGet包。
我是否需要安裝Microsoft Office才能使用IronXL將SQL資料匯出到Excel?
不,IronXL允許您在不需要將Microsoft Office安裝在您的系統或伺服器上進行SQL資料匯出到Excel。
IronXL在將SQL資料匯出到Excel時能處理大型資料集嗎?
確實,IronXL能高效地處理大型資料集。對於非常大的匯出,請使用SQL OFFSET/FETCH進行分頁,使用SaveAs而非ToByteArray寫入磁盤,並在SQL查詢中限制選定的列。
如何匯出多個SQL表到單獨的Excel工作表?
使用透過多個SqlDataAdapter調用填充的DataSet使用WorkBook.LoadWorkSheetsFromDataSet。IronXL為每個DataTable建立一個工作表,並從DataTable.TableName屬性命名每個標籤頁。
如何在ASP.NET中觸發Excel檔案下載?
呼叫workBook.ToByteArray()以取得檔案的字節,然後使用正確的Content-Type和content-disposition頭寫入HTTP回應。在ASP.NET Core中,從控制器返回File(fileBytes, contentType, filename)。
我可以用IronXL將Excel資料導入回SQL Server嗎?
可以。使用WorkBook.Load載入Excel檔案,使用IronXL的索引器遍歷工作表行,然後使用參數化SqlCommand插入每行以防止SQL注入。
IronXL與Microsoft Interop相比在SQL資料匯出時有哪些優勢?
IronXL不需要在伺服器上安裝Office,運行於托管程式碼中,並透過LoadWorkSheetsFromDataSet原生支持DataSet匯出。Microsoft Interop需要COM伺服器,且無法在網路伺服環境中可靠運行。




