跳過到頁腳內容
使用 IRONXL

C# 使用 IronXL.Excel 將 HTML 表格匯出至 Excel 檔案

在商業應用中,無論是資料遷移、報表產生或需要進一步分析的網頁,提取 HTML 表格資料並將其轉換為 Excel 表格都是一個常見的需求。 本文提供了將 HTML 資料表內容匯出為 Excel 格式的簡單步驟。 雖然有些庫提供了轉換 HTML 表格的內建方法,但這些方法通常在文件格式或支援的功能方面有限制。

當您需要將 HTML 表格匯出到 Excel 時,了解 Excel 工作表結構和 HTML 表格之間的關係至關重要。 本指南示範如何有效率地將資料從 HTML 表格轉換為 Excel 格式,以建立保持資料完整性的專業 Excel 工作表輸出。

IronXL提供了一種更靈活的方式將 HTML 表格內容轉換為 Excel 工作表,它結合了強大的 Excel 操作功能和 HTML 解析功能,以 C# 格式將 HTML 表格匯出到 Excel。 無論您需要從 URL 下載資料還是處理資料庫中的內容,此解決方案都能處理各種輸入場景。

為什麼選擇 IronXL 匯出 HTML 表格資料?

IronXL擅長於建立和處理Excel 檔案,而不需要安裝 Microsoft Office,因此非常適合伺服器環境和跨平台應用程式。 IronXL 與強大的 HTML 檔案和內容解析器HTML Agility Pack搭配使用時,就成為將任何 HTML 表格結構轉換為 Excel 表格資料的多功能解決方案。 這種方法可以與 .NET 應用程式無縫協作,並能有效地處理大型資料集。

與 Syncfusion Excel 函式庫的 XlsIO 等函式庫不同,後者提供的 ImportHtmlTable 函數僅限於特定的 HTML 格式和表格結構,IronXL 的方法使開發人員能夠完全控制解析和轉換過程。 這種靈活性意味著開發人員可以處理複雜的場景,例如巢狀表、自訂資料格式和選擇性列提取,而這些是僵化的內建方法無法實現的。 預設設定適用於大多數使用場景,但您可以自訂每個細節。

此外,IronXL 還提供全面的 Excel 功能,包括公式支援儲存格樣式多工作表管理以及各種匯出格式(XLSX、XLS、JSON 和 CSV 檔案)。 您甚至可以建立圖表、匯出為 PDF 以及管理隱藏欄位數據,使其成為滿足 Excel 自動化需求的完整解決方案,而不僅僅是簡單的 HTML 表格轉換。 無論是處理資料表物件還是電子表格文件,IronXL 都能無縫地處理轉換。

如何設定所需的庫?

首先,透過 NuGet 套件管理器安裝 IronXL 和 HTML Agility Pack。 IronXL 提供免費試用版,供用戶測試所有功能:

Install-Package IronXL.Excel
Install-Package HtmlAgilityPack
Install-Package IronXL.Excel
Install-Package HtmlAgilityPack
$vbLabelText   $csharpLabel

這些 NuGet 套件可讓您以程式設計方式建立、載入和儲存 Excel 文件。 然後將必要的 using 語句匯入到您的 C# 程式碼檔案中:

using IronXL;
using HtmlAgilityPack;
using System;
using System.Linq;
using IronXL;
using HtmlAgilityPack;
using System;
using System.Linq;
Imports IronXL
Imports HtmlAgilityPack
Imports System
Imports System.Linq
$vbLabelText   $csharpLabel

這些函式庫可以無縫協作,HTML Agility Pack 負責 HTML 解析,而 IronXL 負責 Excel 檔案的建立和操作。 本範例示範了將 HTML 表格轉換為 XLSX 格式的簡單方法。

如何使用 HTML Agility Pack 解析 HTML 表格資料?

HTML Agility Pack 提供了一種使用 XPath 表達式瀏覽 HTML 文件的簡單方法。 以下程式碼展示如何從 HTML 表格中提取資料並準備匯出:

// Sample HTML table with product data
string htmlContent = @"
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Price</th>
            <th>Stock</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Laptop</td>
            <td>$999</td>
            <td>15</td>
        </tr>
        <tr>
            <td>Mouse</td>
            <td>$25</td>
            <td>50</td>
        </tr>
        <tr>
            <td>Keyboard</td>
            <td>$75</td>
            <td>30</td>
        </tr>
    </tbody>
</table>";
// Load HTML document for parsing
var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
// Select the HTML table element using XPath
var table = doc.DocumentNode.SelectSingleNode("//table");
// Sample HTML table with product data
string htmlContent = @"
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Price</th>
            <th>Stock</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Laptop</td>
            <td>$999</td>
            <td>15</td>
        </tr>
        <tr>
            <td>Mouse</td>
            <td>$25</td>
            <td>50</td>
        </tr>
        <tr>
            <td>Keyboard</td>
            <td>$75</td>
            <td>30</td>
        </tr>
    </tbody>
</table>";
// Load HTML document for parsing
var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
// Select the HTML table element using XPath
var table = doc.DocumentNode.SelectSingleNode("//table");
' Sample HTML table with product data
Dim htmlContent As String = "
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Price</th>
            <th>Stock</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Laptop</td>
            <td>$999</td>
            <td>15</td>
        </tr>
        <tr>
            <td>Mouse</td>
            <td>$25</td>
            <td>50</td>
        </tr>
        <tr>
            <td>Keyboard</td>
            <td>$75</td>
            <td>30</td>
        </tr>
    </tbody>
</table>"

' Load HTML document for parsing
Dim doc As New HtmlDocument()
doc.LoadHtml(htmlContent)

' Select the HTML table element using XPath
Dim table = doc.DocumentNode.SelectSingleNode("//table")
$vbLabelText   $csharpLabel

這段程式碼將 HTML 內容載入到HtmlDocument物件中,並使用 XPath 查詢和選取表格元素。 SelectSingleNode方法傳回 HTML 中找到的第一個表格,方便在存在多個表格時精確定位特定表格。此方法會處理表格的每一行,提取儲存格值進行轉換。

如何使用 IronXL 將解析後的資料匯出到 Excel?

使用 IronXL,我們可以輕鬆地將解析後的 HTML 表格資料轉換為格式正確的專業 Excel 電子表格。 以下程式碼示範如何使用自訂字體大小和字體系列設定匯出資料:

// Create a new Excel workbook
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Exported Data");
// Extract and write headers
var headers = table.SelectNodes(".//thead/tr/th");
if (headers != null)
{
    for (int col = 0; col < headers.Count; col++)
    {
        workSheet.SetCellValue(0, col, headers[col].InnerText.Trim());
        // Apply header formatting
        var headerCell = workSheet.GetCellAt(0, col);
        headerCell.Style.Font.Bold = true;
        headerCell.Style.BackgroundColor = "#4CAF50";
    }
}
// Extract and write data rows
var rows = table.SelectNodes(".//tbody/tr");
if (rows != null)
{
    for (int row = 0; row < rows.Count; row++)
    {
        var cells = rows[row].SelectNodes("td");
        if (cells != null)
        {
            for (int col = 0; col < cells.Count; col++)
            {
                string cellValue = cells[col].InnerText.Trim();
                workSheet.SetCellValue(row + 1, col, cellValue);
            }
        }
    }
}
// Auto-fit columns for better readability
for (int col = 0; col < headers?.Count; col++)
{
    workSheet.AutoSizeColumn(col);
}
// Save the Excel file
workBook.SaveAs("ExportedTable.xlsx");
// Create a new Excel workbook
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Exported Data");
// Extract and write headers
var headers = table.SelectNodes(".//thead/tr/th");
if (headers != null)
{
    for (int col = 0; col < headers.Count; col++)
    {
        workSheet.SetCellValue(0, col, headers[col].InnerText.Trim());
        // Apply header formatting
        var headerCell = workSheet.GetCellAt(0, col);
        headerCell.Style.Font.Bold = true;
        headerCell.Style.BackgroundColor = "#4CAF50";
    }
}
// Extract and write data rows
var rows = table.SelectNodes(".//tbody/tr");
if (rows != null)
{
    for (int row = 0; row < rows.Count; row++)
    {
        var cells = rows[row].SelectNodes("td");
        if (cells != null)
        {
            for (int col = 0; col < cells.Count; col++)
            {
                string cellValue = cells[col].InnerText.Trim();
                workSheet.SetCellValue(row + 1, col, cellValue);
            }
        }
    }
}
// Auto-fit columns for better readability
for (int col = 0; col < headers?.Count; col++)
{
    workSheet.AutoSizeColumn(col);
}
// Save the Excel file
workBook.SaveAs("ExportedTable.xlsx");
Imports System

' Create a new Excel workbook
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Exported Data")

' Extract and write headers
Dim headers = table.SelectNodes(".//thead/tr/th")
If headers IsNot Nothing Then
    For col As Integer = 0 To headers.Count - 1
        workSheet.SetCellValue(0, col, headers(col).InnerText.Trim())
        ' Apply header formatting
        Dim headerCell = workSheet.GetCellAt(0, col)
        headerCell.Style.Font.Bold = True
        headerCell.Style.BackgroundColor = "#4CAF50"
    Next
End If

' Extract and write data rows
Dim rows = table.SelectNodes(".//tbody/tr")
If rows IsNot Nothing Then
    For row As Integer = 0 To rows.Count - 1
        Dim cells = rows(row).SelectNodes("td")
        If cells IsNot Nothing Then
            For col As Integer = 0 To cells.Count - 1
                Dim cellValue As String = cells(col).InnerText.Trim()
                workSheet.SetCellValue(row + 1, col, cellValue)
            Next
        End If
    Next
End If

' Auto-fit columns for better readability
For col As Integer = 0 To If(headers?.Count, 0) - 1
    workSheet.AutoSizeColumn(col)
Next

' Save the Excel file
workBook.SaveAs("ExportedTable.xlsx")
$vbLabelText   $csharpLabel

這段程式碼示範了 IronXL 直覺的 C# Excel 操作 API。 首先,它會建立一個新的工作簿和工作表。 然後,它遍歷已解析的 HTML 表格標題,將它們放置在第一行,同時套用粗體格式和綠色背景色。 HTML 表格中的資料行也以類似的方式處理,提取每個儲存格的文字內容並將其放入對應的 Excel 儲存格中。 AutoSizeColumn函數確保所有內容都可見,最後,工作簿將儲存為 XLSX 檔案。您可以輕鬆下載生成的文件,或將其儲存到資料庫中以便日後檢索。

使用 IronXL 將 C# HTML 表格匯出到 Excel 檔案:圖 1 - IronXL 解析後的表格資料輸出

這裡可以看到原始 HTML 表格與上述輸出結果的比較:

使用 IronXL 將 C# HTML 表格匯出到 Excel 檔案:圖 2 - 解析後的 Excel 資料與原始 HTML 表格進行比較

處理常見場景

當處理多個表格時,只需使用SelectNodes(&quot;//table&quot;)取得所有表格並遍歷它們,為每個表格建立單獨的工作表。 本範例展示如何處理包含大型資料集的複雜場景:

var tables = doc.DocumentNode.SelectNodes("//table");
foreach (var tbl in tables)
{
    // Create new worksheet for each table
    WorkSheet ws = workBook.CreateWorkSheet($"Table_{tables.IndexOf(tbl) + 1}");
    // Process table as shown above
}
var tables = doc.DocumentNode.SelectNodes("//table");
foreach (var tbl in tables)
{
    // Create new worksheet for each table
    WorkSheet ws = workBook.CreateWorkSheet($"Table_{tables.IndexOf(tbl) + 1}");
    // Process table as shown above
}
Dim tables = doc.DocumentNode.SelectNodes("//table")
For Each tbl In tables
    ' Create new worksheet for each table
    Dim ws As WorkSheet = workBook.CreateWorkSheet($"Table_{tables.IndexOf(tbl) + 1}")
    ' Process table as shown above
Next
$vbLabelText   $csharpLabel

為了處理錯誤,請將解析邏輯放在 try-catch 區塊中,以便優雅地處理格式錯誤的 HTML。 IronXL 會自動處理資料類型偵測,並在適當的時候將數字字串轉換為數字。 對於涉及動態內容的更複雜場景,開發人員通常會將這種方法與Selenium WebDriver等工具結合使用,以處理 JavaScript 渲染的表格。

在處理來自 URL 或資料庫查詢的內容以進行進一步分析時,您可能需要處理其他細節,例如隱藏欄位值或特殊格式要求。 預設行為適用於標準表格,但您可以根據需要為每一列或任何特定表格行自訂字體大小、字體系列和其他樣式屬性。

結論

IronXL 和 HTML Agility Pack 的組合為使用 C# 將 HTML 表格匯出到 Excel 提供了一個強大且靈活的解決方案。 本文示範了將 HTML 內容轉換為 XLSX 格式、匯出資料表資訊以及建立專業電子表格檔案的簡單步驟。 這種方法比僵化的內建方法提供了更大的控制權,使開發人員能夠在利用 IronXL 的全面 Excel 功能的同時處理複雜的 HTML 結構。

無論您是建立網路爬蟲、從資料庫遷移遺留資料、使用圖表自動產生報告,還是對大型資料集執行資料分析,此解決方案均可擴展以滿足企業需求。 提供的程式碼範例展示如何處理各種輸入來源,從靜態 HTML 到透過 URL 取得的動態內容。 您可以輕鬆地將結果匯出以供下載或在 .NET 應用程式中進行進一步處理。

準備好將您的 HTML 資料轉換為專業的 Excel 表格檔案了嗎? 立即開始 IronXL 的免費試用,體驗無需依賴 Office 即可靈活進行程式化 Excel 操作的便利性。 對於生產部署,請探索我們的 授權選項,從 $799 開始。

常見問題解答

在商業應用程式中,將 HTML 表格轉換為 Excel 的主要目的是什麼?

主要目的是透過將 HTML 表格資料轉換成 Excel 易於管理和分析的格式,以利於資料轉移、報表產生或進一步分析網頁資料。

指南建議使用哪個函式庫以 C# 將 HTML 表格轉換為 Excel?

本指南建議使用 IronXL 將 HTML 表格轉換為 C# 語言的 Excel,因為它提供了一種不需要 Microsoft Office 的彈性方法。

為什麼有些函式庫可能不適合將 HTML 表格轉換為 Excel?

有些函式庫可能不適合,因為它們在檔案格式上有限制或缺乏支援功能,這可能會限制它們處理各種資料轉換需求的效能。

使用 IronXL.Excel 匯出 HTML 表格到 Excel 是否需要 Microsoft Office?

不,使用 IronXL 不需要 Microsoft Office。它可跨平台運作,並提供將 HTML 表格匯出至 Excel 的彈性解決方案。

IronXL 可以處理 HTML 表格到 Excel 的跨平台轉換嗎?

是的,IronXL 可以處理 HTML 表格到 Excel 的跨平台轉換,使其成為在不同環境下工作的開發人員的通用工具。

將 HTML 表格轉換為 Excel 的常見用例有哪些?

常見的使用案例包括資料遷移、產生報告,以及以更有條理且更容易存取的格式分析網頁資料。

Curtis Chau
技術撰稿人

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

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