跳至頁尾內容
USING IRONXL

using IronXL 在 C# 中將 SQL 資料匯出到 Excel

從SQL Server匯出資料到Microsoft Excel是.NET開發人員在建立報告系統、資料分析工具和商務應用程式時的常見任務。 本教程向您展示如何使用C#和IronXL將SQL資料匯出到Excel,這是一個.NET Excel程式庫,處理整個過程而不需要安裝Microsoft Office。

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

現在開始使用IronXL。
green arrow pointer

如何安裝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
$vbLabelText   $csharpLabel

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互操作開銷而造成性能瓶頸。

核心模式很簡單。 SqlDataAdapterMicrosoft的ADO.NET資料存取框架的一部分,自.NET 1.0以來一直是從關聯資料庫填充DataTable物件的標準方式:

  1. 使用連接字串打開SqlConnection
  2. 使用DataSet
  3. 調用IronXL方法來建立工作簿並填充工作表單元格
  4. 將工作簿保存為.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
$vbLabelText   $csharpLabel

輸出

如何使用C#和IronXL將SQL資料匯出到Excel:圖像1 - 生成的Excel文件

此程式碼通過您的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
$vbLabelText   $csharpLabel

輸出

如何使用C#和IronXL將SQL資料匯出到Excel:圖像4 - 生成的文件,帶有列標題

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

範例匯出按鈕

如何使用C#和IronXL將SQL資料匯出到Excel:圖像2 - 範例匯出按鈕介面

輸出

如何使用C#和IronXL將SQL資料匯出到Excel:圖像3 - 生成的文件

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

使用粗體文字和較大字體樣式標題行,使得匯出的報告在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
$vbLabelText   $csharpLabel

參數化的查詢在讀取使用者提供的Excel資料時防止SQL注入。 Microsoft Learn上的SqlCommand文件涵蓋了所有可用的重載和參數綁定模式。 在插入之前始終驗證單元格值 - 檢查空字串、超出範圍的數字和可能導致SQL Server表約束違反的意外資料型別。

對於反方向,IronXL還支持在C#中讀取CSV文件,用於資料源生成逗號分隔輸出的場景,而不是.xlsx文件。

如何比較IronXL與其他匯出方法?

在.NET中匯出SQL資料到Excel有多種方法。 下表總結了主要的取捨:

SQL到Excel匯出方法在.NET中的特性比較
方法 需要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文件生成。

若想在此基礎上繼續構建,請探索以下相關資源:

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

常見問題

如何使用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伺服器,且無法在網路伺服環境中可靠運行。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話