使用 IRONXL 如何使用IronXL在 C# 中将 HTML 表格导出到 Excel Curtis Chau 已更新:2026年2月27日 下载 IronXL NuGet 下载 DLL 下载 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 提取 HTML 表格数据并将其转换为 Excel 表格是商业应用中的常见需求——无论是数据迁移、报表生成,还是需要进一步分析的网页。 本指南提供了使用IronXL和HTML Agility Pack将 HTML 表格中的数据导出为 Excel 格式的清晰步骤。 当您需要将 HTML 表格导出到 Excel 时,了解 Excel 工作表结构和 HTML 表格之间的关系至关重要。 本指南演示如何高效地将数据从 HTML 表格转换为 Excel 格式,创建保持数据完整性的专业 Excel 工作表输出。 IronXL提供了一种灵活的方式,可以将 HTML 表格内容转换为 Excel 工作表,它结合了强大的 Excel 操作功能和 HTML 解析功能,以 C# 格式将 HTML 表格导出到 Excel。 无论您需要从 URL 下载数据还是处理数据库中的内容,此解决方案都能处理各种输入场景,而无需在计算机上安装 Microsoft Office。 为什么应该使用IronXL导出 HTML 表格数据? IronXL擅长创建和操作Excel 文件,无需安装 Microsoft Office ,因此非常适合服务器环境和跨平台应用程序。 当与功能强大的 HTML 文件和内容解析器HTML Agility Pack配合使用时, IronXL就成为将任何 HTML 表格结构转换为 Excel 表格数据的多功能解决方案。 这种方法与.NET 10 应用程序配合良好,可以高效地处理大型数据集。 与 Syncfusion Excel 库的 XlsIO 等库不同,后者提供的 ImportHtmlTable 函数仅限于特定的 HTML 格式和表格结构, IronXL方法使开发人员能够完全控制解析和转换过程。 这种灵活性意味着开发人员可以处理复杂场景,如嵌套表格、自定义数据格式和选择性列提取,这些是僵硬的内置方法无法容纳的。 IronXL还提供全套 Excel 功能,包括公式支持、单元格样式、多工作表管理以及各种导出格式(XLSX、XLS、JSON 和 CSV)。 您可以创建图表、导出为 PDF 以及管理隐藏字段数据,使其成为超越简单 HTML 表格转换的完整 Excel 自动化解决方案。 如何安装所需的库? 通过NuGet包管理器安装IronXL和 HTML Agility Pack。 IronXL提供免费试用,让用户在购买许可证之前测试所有功能。 包管理器控制台 Install-Package IronXl.Excel Install-Package HtmlAgilityPack Install-Package IronXl.Excel Install-Package HtmlAgilityPack SHELL NuGet CLI不与Visual Studio项目互动,因为它是一个跨平台工具。 dotnet add package IronXl.Excel dotnet add package HtmlAgilityPack dotnet add package IronXl.Excel dotnet add package HtmlAgilityPack SHELL 这些NuGet包允许您以编程方式创建、加载和保存Excel文档。 安装完这两个软件包后,请在 C# 文件顶部添加必要的 using 语句: using IronXL; using HtmlAgilityPack; using System; using System.Linq; using IronXL; using HtmlAgilityPack; using System; using 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"); $vbLabelText $csharpLabel 这段代码将 HTML 内容加载到 HtmlDocument 对象中,并使用 XPath 查询和选择表格元素。 SelectSingleNode 方法返回 HTML 中找到的第一个表格,方便在存在多个表格时定位特定表格。然后处理表格的每一行,提取单元格值进行转换。 哪些 XPath 表达式最适合表格解析? 对于标准 HTML 表格,XPath 表达式 //table 选择文档中的第一个表格。 当处理包含多个表格的更复杂的页面时,可以使用位置选择器(例如 (//table)[2])通过索引来定位特定表格。 当表包含有意义的标识符时,像 //table[@id='data-table'] 或 //table[@class='products'] 这样的基于属性的选择器也很有用。 当 HTML 来自实时 URL 时,您可以使用 HtmlWeb 类直接加载文档: var web = new HtmlWeb(); var remoteDoc = web.Load("https://example.com/data-page"); var remoteTable = remoteDoc.DocumentNode.SelectSingleNode("//table[@class='data-table']"); var web = new HtmlWeb(); var remoteDoc = web.Load("https://example.com/data-page"); var remoteTable = remoteDoc.DocumentNode.SelectSingleNode("//table[@class='data-table']"); $vbLabelText $csharpLabel 这样就可以直接从公共网页中提取表格,而无需先手动保存 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"); $vbLabelText $csharpLabel 此代码演示了IronXL在C#中进行Excel操作的直观API。 它会创建一个新的工作簿和工作表,然后遍历已解析的 HTML 表格标题,将它们放置在第一行,同时应用粗体格式和绿色背景色。 HTML 表格中的数据行逐行处理,每个单元格的文本内容被提取出来并放入相应的 Excel 单元格中。 AutoSizeColumn 函数确保所有内容可见,并将工作簿保存为 XLSX 文件。 这里可以看到原始 HTML 表格与上述代码输出的对比: 如何将单元格格式应用于导出的数据? 除了上面显示的基本粗体和背景颜色之外, IronXL还允许您对单元格样式进行精细控制。 您可以为任何单元格或区域设置字体大小、字体、文本对齐方式、边框和数字格式: // Apply number formatting to a price column (column index 1) var priceRange = workSheet[$"B2:B{rows.Count + 1}"]; priceRange.FormatString = "$#,##0.00"; // Set font size on all header cells var headerRange = workSheet[$"A1:{(char)('A' + headers.Count - 1)}1"]; headerRange.Style.Font.Height = 13; // in half-points, so 13 = 6.5pt // Apply number formatting to a price column (column index 1) var priceRange = workSheet[$"B2:B{rows.Count + 1}"]; priceRange.FormatString = "$#,##0.00"; // Set font size on all header cells var headerRange = workSheet[$"A1:{(char)('A' + headers.Count - 1)}1"]; headerRange.Style.Font.Height = 13; // in half-points, so 13 = 6.5pt $vbLabelText $csharpLabel 对于列宽,AutoSizeColumn 可以处理大多数情况,但当需要精确布局时,也可以使用 SetColumnWidth 方法设置显式宽度。 这些样式控件是IronXL API 的一部分,该 API 还处理工作簿中其他部分的单元格字体样式。 如何处理多个表格和错误情况? 当在同一页面上处理多个表格时,使用 SelectNodes("//table") 检索所有表格并遍历它们,为每个表格创建一个单独的工作表: var tables = doc.DocumentNode.SelectNodes("//table"); if (tables != null) { for (int t = 0; t < tables.Count; t++) { WorkSheet ws = workBook.CreateWorkSheet($"Table_{t + 1}"); var tblHeaders = tables[t].SelectNodes(".//thead/tr/th"); var tblRows = tables[t].SelectNodes(".//tbody/tr"); if (tblHeaders != null) { for (int col = 0; col < tblHeaders.Count; col++) { ws.SetCellValue(0, col, tblHeaders[col].InnerText.Trim()); ws.GetCellAt(0, col).Style.Font.Bold = true; } } if (tblRows != null) { for (int row = 0; row < tblRows.Count; row++) { var cells = tblRows[row].SelectNodes("td"); if (cells != null) { for (int col = 0; col < cells.Count; col++) { ws.SetCellValue(row + 1, col, cells[col].InnerText.Trim()); } } } } } } workBook.SaveAs("MultiTableExport.xlsx"); var tables = doc.DocumentNode.SelectNodes("//table"); if (tables != null) { for (int t = 0; t < tables.Count; t++) { WorkSheet ws = workBook.CreateWorkSheet($"Table_{t + 1}"); var tblHeaders = tables[t].SelectNodes(".//thead/tr/th"); var tblRows = tables[t].SelectNodes(".//tbody/tr"); if (tblHeaders != null) { for (int col = 0; col < tblHeaders.Count; col++) { ws.SetCellValue(0, col, tblHeaders[col].InnerText.Trim()); ws.GetCellAt(0, col).Style.Font.Bold = true; } } if (tblRows != null) { for (int row = 0; row < tblRows.Count; row++) { var cells = tblRows[row].SelectNodes("td"); if (cells != null) { for (int col = 0; col < cells.Count; col++) { ws.SetCellValue(row + 1, col, cells[col].InnerText.Trim()); } } } } } } workBook.SaveAs("MultiTableExport.xlsx"); $vbLabelText $csharpLabel 当HTML格式错误时应该怎么办? 实际应用中的HTML代码并非总是有效的。 从外部来源抓取的页面可能缺少结束标签、不一致的 tbody 结构,或者标题行中混合了 th 和 td 元素。 HTML Agility Pack 的设计比较宽容,能够解析大多数格式错误的 HTML 而不会抛出异常,但您的 XPath 选择器可能与您预期的不符。 一个安全的模式是将解析逻辑包装在 try-catch 块中,并添加一个回退机制,当找不到 thead 元素时,直接在表格下查找 tr 元素: try { var headerNodes = table.SelectNodes(".//thead/tr/th") ?? table.SelectNodes(".//tr[1]/th") ?? table.SelectNodes(".//tr[1]/td"); var dataRows = table.SelectNodes(".//tbody/tr") ?? table.SelectNodes(".//tr[position()>1]"); // ... process as normal } catch (Exception ex) { Console.WriteLine($"Table parsing failed: {ex.Message}"); } try { var headerNodes = table.SelectNodes(".//thead/tr/th") ?? table.SelectNodes(".//tr[1]/th") ?? table.SelectNodes(".//tr[1]/td"); var dataRows = table.SelectNodes(".//tbody/tr") ?? table.SelectNodes(".//tr[position()>1]"); // ... process as normal } catch (Exception ex) { Console.WriteLine($"Table parsing failed: {ex.Message}"); } $vbLabelText $csharpLabel IronXL自动处理数据类型检测,在适当时将数字字符串转换为数字。 对于涉及 JavaScript 渲染内容的更复杂场景,您可以将此方法与Selenium WebDriver或Playwright等工具结合使用,首先渲染页面,然后将生成的 HTML 传递给 HTML Agility Pack 进行解析。 如何保存和导出Excel文件? IronXL除了 XLSX 格式外,还支持多种输出格式。 您可以根据下游要求保存为 XLS、CSV、TSV 或 JSON 格式。 在ASP.NET Core中,您还可以将输出直接流式传输到 HTTP 响应,这样就避免了将文件写入磁盘: // Save to disk as XLSX workBook.SaveAs("ExportedTable.xlsx"); // Save as CSV workBook.SaveAsCsv("ExportedTable.csv"); // Stream to HTTP response (ASP.NET Core) // Response.Headers["Content-Disposition"] = "attachment; filename=ExportedTable.xlsx"; // workBook.SaveAs(Response.BodyWriter.AsStream()); // Save to disk as XLSX workBook.SaveAs("ExportedTable.xlsx"); // Save as CSV workBook.SaveAsCsv("ExportedTable.csv"); // Stream to HTTP response (ASP.NET Core) // Response.Headers["Content-Disposition"] = "attachment; filename=ExportedTable.xlsx"; // workBook.SaveAs(Response.BodyWriter.AsStream()); $vbLabelText $csharpLabel 当向 HTTP 响应发送流时,请确保将 Content-Disposition 标头设置为 attachment,以便浏览器将响应视为文件下载。 这种模式在 MVC 控制器和Razor页面中都能很好地发挥作用。 对于需要将数据导出到现有 Excel 模板的情况, IronXL可以加载现有工作簿,并将解析后的 HTML 数据填充到命名区域或特定单元格地址中,同时保留模板中的所有格式。 生产使用的最佳实践是什么? 生产环境中将 HTML 表格导出到 Excel 的推荐做法 忧虑 建议 注意事项 大型数据集 分批处理行 IronXL可以处理数千行数据,但流式输出避免了内存压力。 格式错误的 HTML 使用备用 XPath 选择器 HTML Agility Pack 比较宽松;请在所有 SelectNodes 调用中添加显式空值检查 动态内容 使用 Selenium 或 Playwright 进行预渲染 包含大量 JavaScript 代码的页面需要使用无头浏览器才能解析 HTML。 文件格式 优先选择 XLSX 格式而非 XLS 格式 XLSX 支持更多行、更大的单元格值和现代样式功能 列宽 写入所有数据后调用 AutoSizeColumn 函数 在数据写入之前调用该函数会导致列宽不足。 授权 启动时设置许可证密钥 在任何IronXL调用之前,请先调用`IronXl.License.LicenseKey = "...";` 在处理来自 URL 或数据库查询的内容以进行进一步分析时,处理隐藏字段值或特殊格式要求等附加细节。 默认行为适用于标准表格,但您可以为每一列或任何特定的表格行自定义字体大小、字体系列和其他样式属性。 IronXL在导出Excel 文件后读取数据时,使用相同的 WorkBook.Load API,从而简化了往返工作流程。 您还可以将生成的 Excel 文件转换为其他格式,例如 JSON 或 XML,以便进行进一步处理。 您如何管理许可和部署? IronXL需要许可证密钥才能用于生产环境。 免费试用版包含所有功能,是购买前评估资料库的理想选择。 了解定价和许可选项,找到适合您团队的级别。 IronXL在 Docker、Azure Functions 或 Linux 环境中部署时,不依赖于 Microsoft Office 或 COM Interop,因此管理起来非常简单。 它支持.NET 10 、 .NET 9、 .NET 8、 .NET Framework 4.6.2+,并且与当前的ASP.NET Core导出模式完全兼容。 IronXL和 HTML Agility Pack 的结合为使用 C# 将 HTML 表格导出到 Excel 提供了一个灵活的解决方案。 这里展示的方法比僵化的内置方法提供了更多的控制,让您可以处理复杂的 HTML 结构,同时利用 IronXL 的全部 Excel 功能集。 无论您是构建网络爬虫、从数据库迁移遗留数据、自动生成报告,还是对大型数据集执行数据分析,此解决方案均可扩展以满足企业需求。 代码示例展示了如何处理各种输入源,从静态 HTML 字符串到通过 URL 获取的动态内容。 结果可以导出以供下载或在.NET应用程序中进行进一步处理。 准备好将您的 HTML 数据转换为专业的 Excel 文件了吗? 立即开始IronXL的免费试用,体验无需依赖 Office 即可灵活进行程序化 Excel 操作的便捷性。 常见问题解答 在商业应用中将 HTML 表格转换为 Excel 的主要目的是什么? 主要目的是通过将 HTML 表格数据转换为 Excel 易于管理和分析的格式,方便数据迁移、报告生成或网页数据的进一步分析。 指南建议使用哪个库用 C# 将 HTML 表格转换为 Excel 表格? 指南建议使用 IronXL 在 C# 中将 HTML 表格转换为 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 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新2026年3月1日 在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式 使用 C# 和IronXL在ASP.NET Core中下载 Excel 文件。从 MVC 控制器导出数据到 XLSX、CSV 和 XML 格式,并返回 MemoryStream 和 File() 函数。包含代码示例。 阅读更多 已更新2026年3月1日 如何在Blazor中使用IronXL导出 Excel 文件 学习如何使用IronXL在Blazor Server 应用程序中将数据导出到 Excel。本指南涵盖项目设置、服务设计、条件格式设置、多工作表报表和错误处理,并提供完整的 C# 代码示例。 阅读更多 已更新2026年2月27日 如何在 C# 中读取 Excel 文件而不是使用 StreamReader 了解为什么 StreamReader 无法读取 Excel 文件,以及如何在 C# .NET中使用IronXL从磁盘或内存流加载 XLSX 和 XLS 工作簿。 阅读更多 ExcelDataReader 写 Excel 文件:为什么不能以及 IronXL 如何解决这个问题C# 导出对象至 Excel
已更新2026年3月1日 在.NET C# 中下载 Excel 文件:将数据导出为 XLSX、CSV 等格式 使用 C# 和IronXL在ASP.NET Core中下载 Excel 文件。从 MVC 控制器导出数据到 XLSX、CSV 和 XML 格式,并返回 MemoryStream 和 File() 函数。包含代码示例。 阅读更多
已更新2026年3月1日 如何在Blazor中使用IronXL导出 Excel 文件 学习如何使用IronXL在Blazor Server 应用程序中将数据导出到 Excel。本指南涵盖项目设置、服务设计、条件格式设置、多工作表报表和错误处理,并提供完整的 C# 代码示例。 阅读更多
已更新2026年2月27日 如何在 C# 中读取 Excel 文件而不是使用 StreamReader 了解为什么 StreamReader 无法读取 Excel 文件,以及如何在 C# .NET中使用IronXL从磁盘或内存流加载 XLSX 和 XLS 工作簿。 阅读更多