跳過到頁腳內容
使用 IRONXL

如何使用 IronXL.Excel 使用 C# 將 SQL 資料匯出至 Excel

將資料從 SQL Server 匯出至 Microsoft Excel 是 .NET 開發人員建立報表系統、資料分析工具和商業應用程式的共同需求。 本教學示範如何使用 C# 與 IronXL將 SQL 資料匯出至 Excel,IronXL.Excel 是一個功能強大的 Excel 函式庫,可簡化整個過程而不需要安裝 Microsoft Office。

開始您的免費試用,跟隨以下的程式碼範例。

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

從 SQL Server 資料庫匯出資料的最佳方式是什麼?

從 SQL Server 匯出資料至 Excel 檔案的最有效方法包含三個步驟:建立資料庫連線、擷取資料至 DataTable 中,以及使用 IronXL.Excel 將資料寫入 Excel 工作表。 與 Microsoft Interop 解決方案不同,IronXL.Excel 可獨立運作,並能以優異的效能處理大型資料集。

如何連接至 SQL Server 並擷取資料?

在匯出 SQL 資料之前,您需要先建立連線並執行 SQL 查詢,以填充 DataTable 。 連接字串包含存取資料所需的 SQL Server 資料庫憑證和伺服器資訊。

您需要在 Visual Studio 專案中匯入下列命名空間:

using IronXL;
using System.Data;
using System.Data.SqlClient;
// Define connection string for SQL Server
string connectionString = @"Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True";
// SQL query to retrieve data from SQL Server table
string sql = "SELECT * FROM Customers";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Use SqlDataAdapter to fill DataTable with query results
    SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    // Create new workbook and worksheet
    WorkBook workBook = WorkBook.Create();
    WorkSheet workSheet = workBook.CreateWorkSheet("CustomerData");
    // Export DataTable to Excel worksheet with column names
    int rowIndex = 1;
    // Write column headers from DataTable
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        workSheet.SetCellValue(0, j, dt.Columns[j].ColumnName);
    }
    // Fill worksheet with data values
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            string cellValue = dt.Rows[i][j].ToString();
            workSheet.SetCellValue(rowIndex, j, cellValue);
        }
        rowIndex++;
    }
    // Save Excel file in xlsx format
    workBook.SaveAs("CustomerExport.xlsx");
}
using IronXL;
using System.Data;
using System.Data.SqlClient;
// Define connection string for SQL Server
string connectionString = @"Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True";
// SQL query to retrieve data from SQL Server table
string sql = "SELECT * FROM Customers";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Use SqlDataAdapter to fill DataTable with query results
    SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    // Create new workbook and worksheet
    WorkBook workBook = WorkBook.Create();
    WorkSheet workSheet = workBook.CreateWorkSheet("CustomerData");
    // Export DataTable to Excel worksheet with column names
    int rowIndex = 1;
    // Write column headers from DataTable
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        workSheet.SetCellValue(0, j, dt.Columns[j].ColumnName);
    }
    // Fill worksheet with data values
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            string cellValue = dt.Rows[i][j].ToString();
            workSheet.SetCellValue(rowIndex, j, cellValue);
        }
        rowIndex++;
    }
    // Save Excel file in xlsx format
    workBook.SaveAs("CustomerExport.xlsx");
}
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient

' Define connection string for SQL Server
Dim connectionString As String = "Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True"
' SQL query to retrieve data from SQL Server table
Dim sql As String = "SELECT * FROM Customers"

Using connection As New SqlConnection(connectionString)
    connection.Open()
    ' Use SqlDataAdapter to fill DataTable with query results
    Dim adapter As New SqlDataAdapter(sql, connection)
    Dim dt As New DataTable()
    adapter.Fill(dt)
    ' Create new workbook and worksheet
    Dim workBook As WorkBook = WorkBook.Create()
    Dim workSheet As WorkSheet = workBook.CreateWorkSheet("CustomerData")
    ' Export DataTable to Excel worksheet with column names
    Dim rowIndex As Integer = 1
    ' Write column headers from DataTable
    For j As Integer = 0 To dt.Columns.Count - 1
        workSheet.SetCellValue(0, j, dt.Columns(j).ColumnName)
    Next
    ' Fill worksheet with data values
    For i As Integer = 0 To dt.Rows.Count - 1
        For j As Integer = 0 To dt.Columns.Count - 1
            Dim cellValue As String = dt.Rows(i)(j).ToString()
            workSheet.SetCellValue(rowIndex, j, cellValue)
        Next
        rowIndex += 1
    Next
    ' Save Excel file in xlsx format
    workBook.SaveAs("CustomerExport.xlsx")
End Using
$vbLabelText   $csharpLabel

輸出

如何使用 C# 與 IronXL 將 SQL 資料匯出至 Excel:圖像 1 - 生成的 Excel 檔案

此代碼會建立一個 Excel 檔案,其中的列標題格式正確,這些列標題源自您的 SQL Server 資料表結構。 DataTable dt 會儲存查詢結果,然後有系統地寫入每個 Excel 表單的儲存格中。 以下程式碼示範了填充工作表單格的 add 方法模式。 IronXL 支援 xls 和 xlsx 兩種格式,可與 Microsoft Office 應用程式達到最大的相容性。

如何使用 ASP.NET 匯出按鈕匯出資料?

對於網路應用程式,您通常會在使用者按下匯出按鈕時觸發匯出。 以下程式碼顯示如何使用 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";
        try
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // Execute SQL query to get data from SQL server
                SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Orders", connection);
                DataSet dataSet = new DataSet();
                adapter.Fill(dataSet);
                // Create Excel workbook from DataSet - each table becomes a sheet
                WorkBook workBook = WorkBook.Create();
                WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
                // Convert to byte array for download
                byte[] fileBytes = workBook.ToByteArray();
                string filename = "OrdersExport.xlsx";
                // Set response headers for file download
                Response.Clear();
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", "attachment;filename=" + filename);
                Response.BinaryWrite(fileBytes);
                Response.End();
            }
        }
        catch (Exception ex)
        {
            // Handle any errors during export
            Response.Write("Export error: " + ex.Message);
        }
    }
}
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";
        try
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // Execute SQL query to get data from SQL server
                SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Orders", connection);
                DataSet dataSet = new DataSet();
                adapter.Fill(dataSet);
                // Create Excel workbook from DataSet - each table becomes a sheet
                WorkBook workBook = WorkBook.Create();
                WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
                // Convert to byte array for download
                byte[] fileBytes = workBook.ToByteArray();
                string filename = "OrdersExport.xlsx";
                // Set response headers for file download
                Response.Clear();
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", "attachment;filename=" + filename);
                Response.BinaryWrite(fileBytes);
                Response.End();
            }
        }
        catch (Exception ex)
        {
            // Handle any errors during export
            Response.Write("Export error: " + ex.Message);
        }
    }
}
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"
        Try
            Using connection As New SqlConnection(connectionString)
                ' Execute SQL query to get data from SQL server
                Dim adapter As New SqlDataAdapter("SELECT * FROM Orders", connection)
                Dim dataSet As New DataSet()
                adapter.Fill(dataSet)
                ' Create Excel workbook from DataSet - each table becomes a sheet
                Dim workBook As WorkBook = WorkBook.Create()
                WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook)
                ' Convert to byte array for download
                Dim fileBytes As Byte() = workBook.ToByteArray()
                Dim filename As String = "OrdersExport.xlsx"
                ' Set response headers for file download
                Response.Clear()
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                Response.AddHeader("content-disposition", "attachment;filename=" & filename)
                Response.BinaryWrite(fileBytes)
                Response.End()
            End Using
        Catch ex As Exception
            ' Handle any errors during export
            Response.Write("Export error: " & ex.Message)
        End Try
    End Sub
End Class
$vbLabelText   $csharpLabel

匯出按鈕範例

如何使用 C# 與 IronXL 將 SQL 資料匯出至 Excel:圖示 2 - 匯出按鈕 ui 的範例

輸出

如何使用 C# 與 IronXL 將 SQL 資料匯出至 Excel:圖片 3 - 生成的檔案

object senderEventArgs e 參數是 ASP.NET 事件處理器的標準參數。 IronXL 與 Microsoft Interop 不同,Microsoft Interop 需要 object misValue 來處理遺失的參數,而 IronXL 則使用較為乾淨的 API。 當使用者按下匯出按鈕時,此私有 void 方法會執行資料庫查詢、建立 Excel 文件,並透過瀏覽器觸發檔案下載。

如何匯入資料並建立有欄頭的 Excel 檔案?

IronXL 提供多種方法來有效率地建立 Excel 檔案匯入資料LoadWorkSheetsFromDataSet 方法接受 DataTable 集合,並自動將列名保留為 Excel 工作表中的標題。 此方法可與 System.Data 物件和 Microsoft SQL Server 無縫配合。

using IronXL;
using System.Data;
using System.Data.SqlClient;
// Connection to SQL database
string connectionString = @"Data Source=.;Initial Catalog=Inventory;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Query multiple tables from database
    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");
    // Create new workbook and load all tables
    WorkBook workBook = WorkBook.Create();
    WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
    // Save as xlsx file
    workBook.SaveAs("InventoryReport.xlsx");
}
using IronXL;
using System.Data;
using System.Data.SqlClient;
// Connection to SQL database
string connectionString = @"Data Source=.;Initial Catalog=Inventory;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Query multiple tables from database
    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");
    // Create new workbook and load all tables
    WorkBook workBook = WorkBook.Create();
    WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);
    // Save as xlsx file
    workBook.SaveAs("InventoryReport.xlsx");
}
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient

' Connection to SQL database
Dim connectionString As String = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
    connection.Open()
    ' Query multiple tables from database
    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")
    ' Create new workbook and load all tables
    Dim workBook As WorkBook = WorkBook.Create()
    WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook)
    ' Save as xlsx file
    workBook.SaveAs("InventoryReport.xlsx")
End Using
$vbLabelText   $csharpLabel

輸出

如何使用 C# 與 IronXL 將 SQL 資料匯出至 Excel:圖片 4 - 已產生具有欄目標題的檔案

此方法可有效處理多個 SQL Server 表格,在單一工作簿中建立獨立的工作表標籤。 對於使用儲存程序的應用程式,只要使用 CommandType.StoredProcedure 將內嵌的 SQL 查詢取代為您的程序呼叫即可。

使用 HTML 標記的 Web 應用程式如何?

在 ASP.NET 應用程式中,HTML 標記由按鈕和資料網格組成,IronXL for .NET 可與之無縫整合。 您頁面的 HTML 標記由觸發伺服器端匯出作業的標準網頁控制項組成,而 IronXL 則處理所有 Excel 的產生,無須依賴 Microsoft Office。

有關 匯出 DataSet 和 DataTable 物件的詳細指引,請造訪 IronXL.Excel 文件。

結論

有了 IronXL.Excel,使用 C# 將 SQL 資料匯出至 Excel 就變得簡單直接。 該函式庫消除了複雜的 Interop 相依性,同時提供對 DataTable, DataSet 以及直接資料庫整合的強大支援。 無論是建立主控台應用程式或具有檔案下載功能的網頁型報表系統,IronXL.Excel 都能提供可靠的 Excel 檔案生成功能。

購買授權進行生產部署,或使用 免費試用繼續探索,在您的 .NET 專案中測試此 Excel 函式庫的全部功能。

常見問題解答

如何使用 C# 將 SQL 資料匯出至 Excel?

利用 IronXL.Excel 這個功能強大的 Excel 函式庫,您可以使用 C# 將 SQL 資料匯出至 Excel。它簡化了流程,而且不需要安裝 Microsoft Office。

使用 IronXL 匯出 SQL 資料的先決條件是什麼?

若要使用 IronXL 匯出 SQL 資料,您必須具備對 C# 的基本瞭解、存取 SQL Server 的能力,以及在開發環境中安裝 IronXL 函式庫。

使用 IronXL.Excel 匯出 SQL 資料到 Excel 是否需要安裝 Microsoft Office?

不,IronXL.Excel 允許您匯出 SQL 資料到 Excel,而不需要在系統上安裝 Microsoft Office。

IronXL.Excel 在匯出 SQL 資料到 Excel 時,可以處理大型資料集嗎?

是的,IronXL.Excel 能有效處理大型資料集,因此適合將大量 SQL 資料匯出至 Excel。

IronXL 是否與所有版本的 SQL Server 相容?

IronXL 的設計可與各種版本的 SQL Server 搭配使用,確保在不同環境下的相容性和易用性。

將 SQL 資料匯出至 Excel 的使用案例有哪些?

將 SQL 資料匯出至 Excel 對於建立報表系統、資料分析工具以及需要以廣泛使用的格式輕鬆存取和分享資料的商業應用程式非常有用。

IronXL 支援 Excel 檔案的格式化選項嗎?

是的,IronXL.Excel 提供一系列格式化選項,可讓您自訂匯出 Excel 檔案的外觀和結構。

IronXL.Excel 如何簡化 SQL 資料匯出至 Excel 的過程?

IronXL.Excel 簡化了匯出程序,提供直覺的方法連接至 SQL Server、擷取 DataTable 記錄以及產生 Excel 檔案,而不需要複雜的設定或額外的軟體。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。