跳過到頁腳內容
使用 IRONXL

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

將Excel數據匯入到ASP.NET C#中的GridView使用IronXL非常簡單。 您載入一個工作簿,將工作表轉換為GridView控件——不需要OLEDB驅動程式或複雜的連接字串。

自己嘗試一下:獲取IronXL的免費試用版,按照下面的代碼示例進行操作。

如何安裝IronXL以進行Excel GridView整合?

在編寫任何代碼之前,您需要將IronXL添加到您的ASP.NET專案中。 最快的方法是通過NuGet,可以從Visual Studio包管理器控制台或.NET CLI使用。

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

安裝後,NuGet會將所有必需的引用添加到您的專案中。 不需要安裝外部驅動程式,不需要註冊OLEDB提供者,並且在伺服器上沒有Microsoft Office的依賴性。 該程式庫作為單個受管理的組件提供,可在Windows、Linux、macOS以及包括Azure App Service的雲託管環境中使用。

安裝後,將以下命名空間添加到任何讀取或寫入Excel數據的程式碼後文件中:

using IronXL;
using System.Data;
using System.IO;
using IronXL;
using System.Data;
using 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不再附帶64位的ACE驅動程式。

IronXL完全消除了這種依賴。 它直接以受管理代碼讀取原始Open XML或BIFF格式。 在開發、部署和生產中,無需擔心驅動程式版本的問題,預查性行為一如既往。

IronXL針對哪些.NET平台?

IronXL針對.NET 10、.NET 8、.NET Standard 2.0和.NET Framework 4.6.2+。 這不絕使您無需更改任何代碼即可使用相同的程式庫在經典Web Forms、ASP.NET MVC或現代ASP.NET Core Razor Pages上運行您的ASP.NET應用程序。 您可以在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();
$vbLabelText   $csharpLabel

DataTable中提升工作表的第一行到列名。 當您使用GridView時,ASP.NET會自動為每個Excel標題創建一列。

ToDataTable如何處理混合數據類型?

調用string。 如果您的應用需要類型化的列—例如價格數據的DataTable之前將其轉換為適當的.NET類型。

為了在GridView中進行簡單顯示,字串列就足夠了,因為網格仍然將所有值渲染為文本。

如何創建一個ASP.NET Web Forms頁面來導入Excel?

一個最小的導入頁面需要三個控件:一個文件上傳輸入、一個提交按鈕和GridView。 在<form runat="server">元素中加入如下的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" />
$vbLabelText   $csharpLabel

如果您正在使用Bootstrap樣式表,CssClass屬性將網格接入到您的Bootstrap樣式表中,無需額外配置即可獲得樣式行和邊框。

在後端程式碼中,處理按鈕點擊事件。 下面的模式保存上傳的文件到臨時伺服器路徑,使用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;
}
$vbLabelText   $csharpLabel

此實施在遵循頂級語句風格的事件處理器中保留了必要的Web Forms事件簽名。 請注意,Uploads文件夾已經存在,則調用為空操作。

將Excel匯入到ASP.NET C#中的GridView,使用IronXL: 上傳的電子表格數據在GridView控件中顯示

用戶選擇一個.xlsx文件並點擊上傳按鈕後,網格將填充電子表格內容。 列名來自Excel文件的第一行,所有後續行成為網格中的數據行。

如何驗證上傳的文件?

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

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

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

if (!allowed.Contains(ext))
{
    lblError.Text = "Only .xls and .xlsx files are accepted.";
    return;
}
$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();
$vbLabelText   $csharpLabel

您的應用需要顯示多個工作表上的數據或讓用戶選擇查看哪一個工作表時,ToDataSet方法便很有用。 返回的DataTable對應於一個Excel工作表,表名與標籤名相匹配。

將Excel匯入到ASP.NET C#中的GridView,使用IronXL:具有名稱的工作表數據綁定到GridView

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

如果您只想要Excel行的子集——例如,"Status"列等於"Active"的行——請讀取由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();
$vbLabelText   $csharpLabel

DataView.RowFilter接受標準SQL WHERE子句語法——相同的表達語言記載於Microsoft Learn上的DataColumn.Expression屬性中——使您無需載入資料庫即可進行排序和篩選。

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

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

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

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

如何將GridView數據導出回Excel?

使用IronXL 從Excel進入到網格,並返回到Excel的完整過程同樣簡明。 這個模式對於"下載為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();
}
$vbLabelText   $csharpLabel

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

將Excel匯入到ASP.NET C#中的GridView,使用IronXL: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);
$vbLabelText   $csharpLabel

這些格式化調用使用IronXL的單元格樣式API,該API模仿Excel文件格式的對象模型,而不需要Interop。

您接下來的步驟是什麼?

您現在擁有一個完整的,無需驅動程式的管道,可將Excel文件導入到ASP.NET GridView,並使用IronXL將GridView數據導出回Excel。 接下來您可以探索以下內容以在此基礎上進行構建:

  • 閱讀IronXL文檔以獲得完整的API參考,包括公式計算、單元格範圍操作和圖表創建。
  • 探索IronXL代碼示例庫,其中包含可立即執行的代碼段,涵蓋CSV匯入、密碼保護工作簿、條件格式等。
  • 如果想更深入了解類型化列映射和空值處理,請嘗試Excel to DataTable教程
  • 查看IronXL授權頁面以檢查從開發授權到OEM再分發的選項。
  • 查看Iron Software 的.NET Excel 閱讀指南以詳細了解工作簿和工作表的導航。
  • 使用C# Excel程式庫比較將IronXL與替代方案進行比較,以功能為基礎的方式對比OLEDB、EPPlus和Open XML SDK。

對於.NET Core和ASP.NET Core應用程式,相同的IronXL API將在Razor Pages和MVC控制器中工作。 IronXL ASP.NET Core指南對文件上傳處理和依賴注入模式的差異進行了說明。

如果您在文檔生成的同時整合IronXL,IronPDF整合指南展示了如何除了Excel之外,將GridView數據導出到PDF報告——這對同時需要這兩種格式的應用程式非常有用。

IronXL免費試用版開始,您可以在購買前測試所有功能。 試用授權無需信用卡。

常見問題解答

在 ASP.NET C# 中使用 IronXl.Excel 將 Excel 匯入 GridView 有何優勢?

使用 IronXL 可簡化在 ASP.NET C# 中將 Excel 資料匯入 GridView 的流程,無需複雜的 OLEDB 連線字串及驅動程式安裝。開發人員只需透過簡單的程式碼,即可載入 XLS 和 XLSX 檔案,將其轉換為 DataTables,並在 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 的專案中,一個值得信賴的選擇。

使用 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 環境,為這些程式語言提供強大的支援與整合功能。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me