使用C#(WinForms .NET 5)将HTML表导出到Excel文件

h7wcgrx3  于 2022-11-16  发布在  C#
关注(0)|答案(2)|浏览(179)

我需要转换一个HTML表格与样式到一个.XLSX文件。
我使用免费版本的GemBox.Spreadsheet来实现这个功能,现在我不介意免费版本的限制,但问题是当我打开Excel文件时,数字被认为是文本。有没有什么解决方案,而不需要手动打开Excel文件并自己转换它们?或者甚至是免费的GemBox库的替代品?

File.WriteAllText("Table.html", html);
ExcelFile.Load("Table.html", LoadOptions.HtmlDefault).Save("Test.xlsx");

我的HTML如下所示

<html>
  <body>
    <center>
      <table border="1" cellpadding="0" cellspacing="0">
        <tr>
          <td>Crimson Witch</td>
          <td>HP</td>
          <td>ATK</td>
          <td>DEF</td>
        </tr>
        <tr>
          <td>Flower</td>
          <td>10</td>
          <td style="background-color: #808080"></td>
          <td style="background-color: #808080"></td>
        </tr>
        <tr>
          <td>Plume</td>
          <td style="background-color: #808080"></td>
          <td>10</td>
          <td style="background-color: #808080"></td>
        </tr>
      </table>
    </center>
  </body>
</html>

解决方法:

File.WriteAllText("Table.html", html.Replace("<center>", string.Empty).Replace("</center>", string.Empty));
ExcelFile.Load("Table.html", LoadOptions.HtmlDefault).Save("Test.xlsx");
sd2nnvve

sd2nnvve1#

出现此问题的原因是<table>位于<center>内部。
请尝试删除<center>元素。

编辑:

此问题现已在当前最新的错误修复版本中得到解决:https://www.gemboxsoftware.com/spreadsheet/nightlybuilds/GBS47v1336.zip
在当前最新的NuGet软件包中:
Install-Package GemBox.Spreadsheet -Version 47.0.1336-hotfix

2ic8powd

2ic8powd2#

我同意乔纳森·伍德的观点。
最好分两步进行:

  1. Parse the HTML table with the HTML Agility Pack NuGet package.
var query = from table in
            doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>()
            from row in table.SelectNodes("tr").Cast<HtmlNode>()
            from cell in row.SelectNodes("th|td").Cast<HtmlNode>()
            select new {Table = table.Id, CellText = cell.InnerText};
  1. Use EPPlus and its LoadFromArrays method.
string firstName = "Bob";
string lastName = "Burton";
DateTime dateOfBirth = new DateTime(2000, 1, 1);
var testData = new List<object[]>()
                {
                    new object[] {"First name", firstName},
                    new object[] {"Last name", lastName},
                    new object[] {"Date of birth", dateOfBirth}
                };

using (var excelPackage = new ExcelPackage())
{
    ExcelWorksheet excelWorksheet = excelPackage.Workbook.Worksheets.Add("Test worksheet");
    //Load the summary data into the sheet, starting from cell A1. Print the column names on row 1
    excelWorksheet.Cells["A1"].LoadFromArrays(testData);
}

相关问题