跳至頁尾內容
USING IRONXL

如何在 ASP.NET C# 中將 Excel 匯入 GridView

在ASP.NET C#中將Excel資料導入GridView非常簡單,使用IronXL。 您載入工作簿,將工作表轉換為GridView控制項——全部不需OLEDB驅動或複雜的連接字串。

自己試試:獲取IronXL的免費試用版來跟隨下面的程式程式碼範例。

如何安裝IronXL以整合Excel GridView?

在編寫任何程式程式碼之前,您需要將IronXL新增到您的ASP.NET專案中。 最快的途徑是使用NuGet,可以從Visual Studio包管理器控制台或.NET CLI。

Install-Package IronXL.Excel

安裝後,NuGet會將所有必需的引用新增到您的專案中。 不需安裝外部驅動,不需註冊OLEDB提供程式,且伺服器上無需依賴Microsoft Office。 該程式庫以單一的托管程式集發佈,並可在Windows、Linux、macOS及包括Azure應用服務的雲託管環境中運行。

安裝後,將以下命名空間新增到任何讀取或寫入Excel資料的程式程式碼後面的文件中:

using IronXL;
using System.Data;
using System.IO;
using IronXL;
using System.Data;
using System.IO;
Imports IronXL
Imports System.Data
Imports System.IO
$vbLabelText   $csharpLabel

IronXL支持.xls(Excel 97-2003)和.xlsx(Excel 2007+)格式,因此您不需要單獨處理每種文件型別。 相同的WorkBook.Load調用通過自動檢查文件簽名來處理任一格式。

為何跳過OLEDB進行GridView資料綁定?

傳統的基於OLEDB的Excel導入需要Microsoft Access Database Engine(ACE或JET),必須在伺服器上安裝正確的位版本(32位或64位)。 由於驅動缺失或不匹配,跨不同伺服器環境的部署通常失敗,而且Microsoft不再預設隨附Windows 64位ACE驅動。

IronXL完全消除了這一依賴。 它直接在托管程式碼中讀取原生Open XML或BIFF格式。 您在開發、預演和生產中得到可預測的行為,無需考慮驅動版本問題。

IronXL針對哪些.NET平台?

IronXL針對.NET 10、.NET 8、.NET Standard 2.0和.NET Framework 4.6.2+。 這意味著無論您的ASP.NET應用程式是在傳統Web Forms、ASP.NET MVC或現代ASP.NET Core Razor Pages上運行,您可以使用相同的程式庫,而無需對Excel處理層進行任何程式碼更改。 您可以在NuGet.org上找到IronXL包,以在安裝前檢查版本歷史和發佈說明。

將Excel資料載入到GridView的最快方法是什麼?

最快的方法是將GridView.DataBind合併成大約四行有效程式碼。 對於基本場景,不需要手動建立列,也不需要逐行迭代。

using IronXL;
using System.Data;

WorkBook workBook = WorkBook.Load("data.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// true = treat first row as column headers
DataTable dataTable = sheet.ToDataTable(true);

GridView1.DataSource = dataTable;
GridView1.DataBind();
using IronXL;
using System.Data;

WorkBook workBook = WorkBook.Load("data.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// true = treat first row as column headers
DataTable dataTable = sheet.ToDataTable(true);

GridView1.DataSource = dataTable;
GridView1.DataBind();
Imports IronXL
Imports System.Data

Dim workBook As WorkBook = WorkBook.Load("data.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet

' True = treat first row as column headers
Dim dataTable As DataTable = sheet.ToDataTable(True)

GridView1.DataSource = dataTable
GridView1.DataBind()
$vbLabelText   $csharpLabel

DataTable中將工作表的第一行提升為列名。 當您將該表綁定到AutoGenerateColumns="true",ASP.NET會自動為每個Excel標題建立一列。

ToDataTable如何處理混合資料型別?

預設情況下,當您調用string儲存。 如果您的應用程式需要型別化的列——例如,價格資料的DataTable之前將它們轉換為相應的.NET型別。

對於簡單的在GridView中顯示,字串列就足夠了,因為網格渲染的所有值都是文字。

如何建立ASP.NET Web Forms頁面以導入Excel?

最低限度的導入頁面需要三個控件:文件上傳輸入、提交按鈕和GridView。 在您的

元素內新增以下ASPX標記:

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload Excel File"
    OnClick="btnUpload_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"
    CssClass="table table-bordered" />
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload Excel File"
    OnClick="btnUpload_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"
    CssClass="table table-bordered" />
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload Excel File" OnClick="btnUpload_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" CssClass="table table-bordered" />
$vbLabelText   $csharpLabel

如果您正在使用Bootstrap樣式表,則CssClass屬性將網格連接到樣式表中,讓您獲得風格化的行和邊框而無需額外配置。

在程式碼後面處理按鈕點擊事件。 下面的模式將上傳的文件保存到臨時伺服器路徑,用IronXL載入,並將結果DataTable綁定到網格中:

using IronXL;
using System.Data;
using System.IO;

void btnUpload_Click(object sender, EventArgs e)
{
    if (!FileUpload1.HasFile) return;

    string uploadDir = Server.MapPath("~/Uploads/");
    Directory.CreateDirectory(uploadDir); // ensure directory exists

    string filePath = Path.Combine(uploadDir, Path.GetFileName(FileUpload1.FileName));
    FileUpload1.SaveAs(filePath);

    WorkBook workBook = WorkBook.Load(filePath);
    WorkSheet sheet = workBook.DefaultWorkSheet;
    DataTable dt = sheet.ToDataTable(true);

    GridView1.DataSource = dt;
    GridView1.DataBind();

    // Store for later export operations
    Session["CurrentData"] = dt;
}
using IronXL;
using System.Data;
using System.IO;

void btnUpload_Click(object sender, EventArgs e)
{
    if (!FileUpload1.HasFile) return;

    string uploadDir = Server.MapPath("~/Uploads/");
    Directory.CreateDirectory(uploadDir); // ensure directory exists

    string filePath = Path.Combine(uploadDir, Path.GetFileName(FileUpload1.FileName));
    FileUpload1.SaveAs(filePath);

    WorkBook workBook = WorkBook.Load(filePath);
    WorkSheet sheet = workBook.DefaultWorkSheet;
    DataTable dt = sheet.ToDataTable(true);

    GridView1.DataSource = dt;
    GridView1.DataBind();

    // Store for later export operations
    Session["CurrentData"] = dt;
}
Imports IronXL
Imports System.Data
Imports System.IO

Sub btnUpload_Click(sender As Object, e As EventArgs)
    If Not FileUpload1.HasFile Then Return

    Dim uploadDir As String = Server.MapPath("~/Uploads/")
    Directory.CreateDirectory(uploadDir) ' ensure directory exists

    Dim filePath As String = Path.Combine(uploadDir, Path.GetFileName(FileUpload1.FileName))
    FileUpload1.SaveAs(filePath)

    Dim workBook As WorkBook = WorkBook.Load(filePath)
    Dim sheet As WorkSheet = workBook.DefaultWorkSheet
    Dim dt As DataTable = sheet.ToDataTable(True)

    GridView1.DataSource = dt
    GridView1.DataBind()

    ' Store for later export operations
    Session("CurrentData") = dt
End Sub
$vbLabelText   $csharpLabel

此實作遵循頂級語句樣式進行事件處理器內的邏輯,同時保留必要的Web Forms事件簽名。 請注意,Uploads文件夾已存在,則調用無操作。

用IronXL將Excel導入至ASP.NET C#中的GridView:上傳的電子表格資料在GridView控件中渲染

使用者選擇.xlsx文件並點擊上傳按鈕後,該網格將填充電子表格的內容。 列名來自Excel文件的第一行,隨後的所有行將成為網格中的資料行。

應如何驗證上傳的文件?

在生產使用中,您應在處理之前檢查文件擴展名和MIME型別。 IronXL會拋出不支持的文件格式異常,但最好在控制器層拒絕不良上傳而不觸及文件系統:

string ext = Path.GetExtension(FileUpload1.FileName).ToLowerInvariant();
string[] allowed = { ".xls", ".xlsx" };

if (!allowed.Contains(ext))
{
    lblError.Text = "Only .xls and .xlsx files are accepted.";
    return;
}
string ext = Path.GetExtension(FileUpload1.FileName).ToLowerInvariant();
string[] allowed = { ".xls", ".xlsx" };

if (!allowed.Contains(ext))
{
    lblError.Text = "Only .xls and .xlsx files are accepted.";
    return;
}
Imports System.IO

Dim ext As String = Path.GetExtension(FileUpload1.FileName).ToLowerInvariant()
Dim allowed As String() = {".xls", ".xlsx"}

If Not allowed.Contains(ext) Then
    lblError.Text = "Only .xls and .xlsx files are accepted."
    Return
End If
$vbLabelText   $csharpLabel

您還應通過IIS請求限制強制執行最大文件大小,或在調用FileUpload1.FileBytes.Length與門檻值進行比較。

如何存取特定工作表和單元格範圍?

如果Excel工作簿包含多個工作表,您需要按名稱定向到特定工作表,避免依賴DefaultWorkSheet。 IronXL提供了一個GetWorkSheet方法,接受工作表標籤名稱作為字串。

using IronXL;
using System.Data;

WorkBook workBook = WorkBook.Load("sales-report.xlsx");

// Access a named sheet
WorkSheet salesSheet = workBook.GetWorkSheet("Q4 Sales");

// Read a specific cell range
var topTen = salesSheet["A1:E11"];

// Convert the entire workbook to a DataSet (one DataTable per sheet)
DataSet allSheets = workBook.ToDataSet();

// Bind the first sheet's DataTable to the grid
GridView1.DataSource = allSheets.Tables[0];
GridView1.DataBind();
using IronXL;
using System.Data;

WorkBook workBook = WorkBook.Load("sales-report.xlsx");

// Access a named sheet
WorkSheet salesSheet = workBook.GetWorkSheet("Q4 Sales");

// Read a specific cell range
var topTen = salesSheet["A1:E11"];

// Convert the entire workbook to a DataSet (one DataTable per sheet)
DataSet allSheets = workBook.ToDataSet();

// Bind the first sheet's DataTable to the grid
GridView1.DataSource = allSheets.Tables[0];
GridView1.DataBind();
Imports IronXL
Imports System.Data

Dim workBook As WorkBook = WorkBook.Load("sales-report.xlsx")

' Access a named sheet
Dim salesSheet As WorkSheet = workBook.GetWorkSheet("Q4 Sales")

' Read a specific cell range
Dim topTen = salesSheet("A1:E11")

' Convert the entire workbook to a DataSet (one DataTable per sheet)
Dim allSheets As DataSet = workBook.ToDataSet()

' Bind the first sheet's DataTable to the grid
GridView1.DataSource = allSheets.Tables(0)
GridView1.DataBind()
$vbLabelText   $csharpLabel

ToDataSet方法在您的應用程式需要顯示多個工作表的資料或讓使用者選擇要查看的工作表時非常有用。 返回的DataTable對應一個Excel工作表,表名與工作表標籤名稱匹配。

用IronXL將Excel導入至ASP.NET C#中的GridView:命名工作表資料綁定到GridView

如何在綁定到GridView前篩選行?

如果您只想要Excel行的子集——例如,"狀態"列等於"啟用"——請讀取DataView篩選,並將篩選視圖綁定到網格:

DataTable dt = sheet.ToDataTable(true);
DataView dv = new DataView(dt)
{
    RowFilter = "Status = 'Active'"
};

GridView1.DataSource = dv;
GridView1.DataBind();
DataTable dt = sheet.ToDataTable(true);
DataView dv = new DataView(dt)
{
    RowFilter = "Status = 'Active'"
};

GridView1.DataSource = dv;
GridView1.DataBind();
Dim dt As DataTable = sheet.ToDataTable(True)
Dim dv As New DataView(dt) With {
    .RowFilter = "Status = 'Active'"
}

GridView1.DataSource = dv
GridView1.DataBind()
$vbLabelText   $csharpLabel

DataView.RowFilter接受標準SQL WHERE子句語法——該語言在Microsoft Learn上的DataColumn.Expression屬性中記錄——使您在不載入資料庫的情況下進行排序和篩選。

如何比較Excel GridView綁定的導入方法?

不同的Excel到GridView綁定方法具有不同的權衡。 下表總結了最常見的方法,以便您選擇適合您場景的方法。

ASP.NET GridView綁定的Excel導入方法比較
方法 需要驅動程式 XLS支持 支援XLSX 伺服器依賴 程式碼複雜性
IronXL(ToDataTable) 否ne 否ne
OLEDB / JET ACE/JET引擎 部分 32/64位驅動
Open XML SDK 否ne 否ne
EPPlus 否ne 無(需要生產商業授權)

IronXL涵蓋了舊版XLS和現代的XLSX格式,不需要伺服器端驅動程式安裝,並在所列選項中提供最低的程式碼複雜性。 對於已經使用其它Iron Software產品(例如IronPDFIronOCR)的團隊,一個Iron Software授權涵蓋整個產品套件。

如何將GridView資料導出回Excel?

完成整個往返——從Excel到網格再回到Excel——同樣可以用IronXL簡單實現。 此模式對於"下載為Excel"按鈕很實用,讓使用者導出當前顯示在網格中的任何東西。

void btnExport_Click(object sender, EventArgs e)
{
    DataTable dt = Session["CurrentData"] as DataTable;
    if (dt == null) return;

    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet ws = workBook.CreateWorkSheet("Export");

    // Write header row
    for (int col = 0; col < dt.Columns.Count; col++)
        ws.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++)
            ws.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);

    string exportDir = Server.MapPath("~/Exports/");
    Directory.CreateDirectory(exportDir);
    string exportPath = Path.Combine(exportDir, "export.xlsx");
    workBook.SaveAs(exportPath);

    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", "attachment; filename=export.xlsx");
    Response.TransmitFile(exportPath);
    Response.End();
}
void btnExport_Click(object sender, EventArgs e)
{
    DataTable dt = Session["CurrentData"] as DataTable;
    if (dt == null) return;

    WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet ws = workBook.CreateWorkSheet("Export");

    // Write header row
    for (int col = 0; col < dt.Columns.Count; col++)
        ws.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++)
            ws.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);

    string exportDir = Server.MapPath("~/Exports/");
    Directory.CreateDirectory(exportDir);
    string exportPath = Path.Combine(exportDir, "export.xlsx");
    workBook.SaveAs(exportPath);

    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", "attachment; filename=export.xlsx");
    Response.TransmitFile(exportPath);
    Response.End();
}
Imports System
Imports System.Data
Imports System.IO

Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim dt As DataTable = TryCast(Session("CurrentData"), DataTable)
    If dt Is Nothing Then Return

    Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
    Dim ws As WorkSheet = workBook.CreateWorkSheet("Export")

    ' Write header row
    For col As Integer = 0 To dt.Columns.Count - 1
        ws.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
            ws.SetCellValue(row + 1, col, If(dt.Rows(row)(col)?.ToString(), String.Empty))
        Next
    Next

    Dim exportDir As String = Server.MapPath("~/Exports/")
    Directory.CreateDirectory(exportDir)
    Dim exportPath As String = Path.Combine(exportDir, "export.xlsx")
    workBook.SaveAs(exportPath)

    Response.Clear()
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    Response.AddHeader("Content-Disposition", "attachment; filename=export.xlsx")
    Response.TransmitFile(exportPath)
    Response.End()
End Sub
$vbLabelText   $csharpLabel

Response.TransmitFile調用將保存的文件流到瀏覽器,觸發下載對話框。 Content-Disposition: attachment標頭確保瀏覽器下載文件而不是嘗試內嵌顯示。

用IronXL將Excel導入至ASP.NET C#中的GridView:DataTable導出回Excel文件

IronXL常見的導出格式選項有哪些?

除了原始資料,IronXL允許您在保存之前應用單元格格式。 您可以設置加粗的標題、列寬、數字格式和背景顏色:

// Bold the header row
ws["A1:Z1"].Style.Font.Bold = true;

// Apply a currency format to column C (index 2), rows 2 onward
ws[$"C2:C{dt.Rows.Count + 1}"].FormatString = IronXL.Styles.BuiltinFormats.Accounting2;

// Auto-fit column widths (IronXL approximates based on content length)
ws.AutoSizeColumn(0);
ws.AutoSizeColumn(1);
// Bold the header row
ws["A1:Z1"].Style.Font.Bold = true;

// Apply a currency format to column C (index 2), rows 2 onward
ws[$"C2:C{dt.Rows.Count + 1}"].FormatString = IronXL.Styles.BuiltinFormats.Accounting2;

// Auto-fit column widths (IronXL approximates based on content length)
ws.AutoSizeColumn(0);
ws.AutoSizeColumn(1);
' Bold the header row
ws("A1:Z1").Style.Font.Bold = True

' Apply a currency format to column C (index 2), rows 2 onward
ws($"C2:C{dt.Rows.Count + 1}").FormatString = IronXL.Styles.BuiltinFormats.Accounting2

' Auto-fit column widths (IronXL approximates based on content length)
ws.AutoSizeColumn(0)
ws.AutoSizeColumn(1)
$vbLabelText   $csharpLabel

這些格式調用使用IronXL單元格樣式API,該API反映了Excel文件格式的物件模型而無需Interop。

您接下來的步驟是什麼?

您現在擁有一個完整的、無需驅動的管道來使用IronXL將Excel文件導入ASP.NET GridView中,並將GridView資料導出回Excel。 這是您接下來可以探索以構建此基礎的內容:

  • 閱讀IronXL文件,了解完整的API參考,包括公式評估、單元格範圍操作和圖表建立。
  • 探索IronXL程式碼範例庫以獲得可直接運行的程式碼片段,涵蓋CSV導入、受密碼保護的工作簿、條件格式等。
  • 嘗試Excel到DataTable教程,如果您想深入了解型別列映射和空值處理。
  • 查看IronXL授權頁面以查看從開發授權到OEM再分發的選項。
  • 審查Iron Software的.NET Excel閱讀指南,以深入了解工作簿和工作表導航。
  • 比較IronXL與替代方案,使用C# Excel庫比較,進行功能逐項對比,包括OLEDB、EPPlus和Open XML SDK。

對於.NET Core和ASP.NET Core應用程式,相同的IronXL API可以在Razor Pages和MVC控制器中使用。 IronXL ASP.NET Core指南通過文件上傳處理和依賴注入模式的差異進行指導。

IronXL免費試用開始,以在購買前測試您的專案中的所有功能。 試用授權不需要信用卡。

常見問題

using IronXL 將 Excel 匯入至 GridView 的好處是什麼?

using IronXL 可以簡化在 ASP.NET C# 中將 Excel 資料匯入至 GridView 的過程,無需複雜的 OLEDB 連接字串和驅動程式安裝。它允許開發者載入 XLS 和 XLSX 檔案,將其轉換為 DataTable,並以簡單的程式碼顯示於 GridView 控制項中。

IronXL 如何處理不同的 Excel 檔案格式?

IronXL 支援多種 Excel 檔案格式,包括 XLS 和 XLSX,使其成為匯入資料至 GridView 的多功能工具。它確保跨不同 Excel 版本的相容性和易用性。

IronXL 能夠將 Excel 文件轉換為 DataTables 嗎?

是的,IronXL 能將 Excel 文件轉換為 DataTables,然後可以輕鬆地在 ASP.NET C# 中的 GridView 控制項中顯示。這一特性簡化了資料操作和可視化的過程。

IronXL 適合處理大型 Excel 文件嗎?

IronXL 設計為高效處理大型 Excel 文件,使其成為需要將大量資料匯入至 ASP.NET C# 中的 GridView 的專案的可靠選擇。

using IronXL 可以避免哪些常見問題?

通過使用 IronXL,開發者可以避免處理 OLEDB 連接字串、伺服器驅動程式相容性和複雜的資料匯入過程等常見問題,從而減少除錯時間。

IronXL 需要任何特殊的伺服器配置嗎?

不需要,IronXL 不需要特殊的伺服器配置或其他驅動程式,這簡化了部署並減少了維護負擔。

IronXL 如何提高開發生產力?

IronXL 通過提供一種簡單而高效的方法將 Excel 資料匯入至 ASP.NET C# 中的 GridView,提高了開發生產力,使開發者能夠專注於其他關鍵任務,而不會因資料匯入的複雜性而陷入困境。

IronXL 可以與現有的 ASP.NET C# 應用程式整合嗎?

是的,IronXL 可以輕鬆整合到現有的 ASP.NET C# 應用程式中,使 Excel 資料無縫匯入至 GridView,而不需要對應用程式架構進行重大更改。

IronXL 支援哪些程式語言?

IronXL 主要設計用於 C# 和 ASP.NET 環境,為這些程式語言提供了穩固的支援和整合。

Curtis Chau
技術作家

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

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

Iron 支援團隊

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