首页 > 解决方案 > C# - 在控制台应用程序中将 HTML 字符串转换为 Excel

问题描述

这里需要一些建议。

我编写了一个 ASP.NET 网页来显示报告。呈现的 html 表在服务器端完成并作为字符串传递回调用 AJAX:

public string GenerateHtml()
{
    var html = "";
    html = "<table><tr><td></td></tr></table>"; 
    return html;
}

和调用 AJAX:

$.ajax({
    url: '/BoardTransaction/GenerateHtml',
    type: "GET", 
    },
    async: false,
    success: function (result) {
        $('#divReport').html(result); 
    } 
});

在页面中,我有一个将生成的表格下载到 Excel 的按钮:

$("#btnDownload").click(function (e) {
    var file = new Blob([$('#divReport').html()],{ type: "application/vnd.ms-excel" });
    var fileName = "FORECAST_" + jQueryToday() + ".xls";

    var url = URL.createObjectURL(file);

    var a = $("<a />",
            {
                href: url,
                download: fileName
            })
        .appendTo("body")
        .get(0)
        .click();
    e.preventDefault();
});

现在的另一个要求是要有一个调度程序来下载同一个表并每周通过电子邮件发送一次。我之前已经对 Excel 进行过编码,所以我知道编写 GenerateHtml() 来适应生成 Excel 文件所需的编码会很痛苦,所以我想知道我是否可以基本上将相同的功能复制到我的控制台应用程序中并使用html 字符串生成 Excel。

希望您能就我应该从哪里开始提出任何建议。尝试搜索 html 到 excel 但如果它在 ASP.NET 但不是 concole 应用程序中,结果给了我。

感谢您的关注。

标签: c#htmlexcelconsole-application

解决方案


尝试 Web 抓取,它将适合您在控制台应用程序中的要求,您只需要 HTML 路径,可能在您的本地或服务器上。我用作本地 HTML 页面。只是你必须安装包(HtmlAgilityPack): https ://www.nuget.org/packages/HtmlAgilityPack/

    string FileLocation = @"D:\HTMLTable.html";
            string HtmlInTextWeGot = File.ReadAllText(FileLocation);
            /*this will call the HTML as text */
            if (!string.IsNullOrEmpty(HtmlInTextWeGot))
                {
                  /*here you load your HTML in HTMLDocument*/
                  HtmlDocument HtmlDocument = new HtmlDocument();
                  HtmlDocument.LoadHtml(HtmlInTextWeGet);
                  /* here you will get all your tables ( which is precent in your HTML)in list */
                  var TablesDataWeGet 
                  =HtmlDocument.DocumentNode.Descendants("table").ToList();

    /*you can also pick the particular HTML table by providing LINQ conditions like */

 var TablesDataWeGet 
                  =HtmlDocument.DocumentNode.Descendants("table").Where(node => node.GetAttributeValue("Id", "").Equals("DatabaseSummary").ToList();
                }

将 HTML 放入列表后,您将根据需要操作表格:如果您想如何将表格转换为列表中的列和行,请查看此页面: https ://html-agility-pack.net/knowledge-base/ 2431652/html-agility-pack和:HTML Agility Pack:在 ASP 中,您已经拥有 Excel 功能,将其复制并粘贴到您的控制台应用程序中。)


推荐阅读