【问题标题】:Export page to excel with logo image将页面导出到带有徽标图像的 Excel
【发布时间】:2011-06-29 02:30:33
【问题描述】:

我必须将一些数据从 asp.net 页面导出到 Excel,所以我基本上使用一个表格来创建我需要的自定义标题,然后是一个 GridView。导出到 excel 时所有数据都正确显示,但是当我将徽标图像添加到 html 时,导出时它不会显示在 Excel 文件中。

由于我需要将它导出到 Excel 2007 或更高版本,我知道我可以使用 Microsoft 的 Open XML 东西来导出数据,问题是我已经完成了所有代码,我想知道是否有是另一种方法来做到这一点,而不是使用 Open XML 重新做一遍。

如果不使用 Open XML 就无法做到这一点,谁能告诉我如何将数据导出到它?我尝试过一次,但没有太大的成功。 =/

顺便说一句,我正在使用 C#。

提前致谢!

我已经更新了代码,现在看起来像这样,但我还是看不到图像... =/

    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    frmPlanoAcao.RenderControl(htmlWrite);

    StringWriter w = new StringWriter();
    HtmlTextWriter t = new HtmlTextWriter(w);
    imgLogo.RenderControl(t);
    var byte_array = System.Text.Encoding.ASCII.GetBytes(w.ToString());
    Response.Write(stringWrite.ToString());

    this.EnableViewState = false;

    Response.Clear();
    Response.Buffer = false;
    Response.Charset = "ISO-8859-1";
    Response.ContentEncoding = System.Text.Encoding.GetEncoding(1252);
    Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", "plano_acao.xls"));
    Response.ContentType = "application/vnd.ms-excel";
    Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">");
    Response.Write(getExcelStyling());
    Response.OutputStream.Write(byte_array, 0, byte_array.Length);
    Response.Write(stringWrite.ToString());
    Response.Write("</body>");
    Response.Write("</html>");
    Response.End();

【问题讨论】:

  • 你现在怎么样了?我认为新的 XML 格式不会对您有任何帮助。
  • 你应该使用one of these libraries。不过,我不知道哪些支持插入图像:希望有人可以在此处的答案中向您推荐一个。
  • 嘿 Rup,谢谢你的例子,但我不认为在那里,他们将图像插入到文件中。我已经能够做他们在那里做的事情,但在另一方面,我唯一的问题实际上只是一个应该放在文件左上角的徽标图像。
  • 我认为您的问题是您试图欺骗 Excel 将 HTML 作为电子表格加载,但事实并非如此。我建议您使用 Excel 库来生成真正的电子表格,而不是 HTML。如果您想在 HTML 中嵌入图像,那么您可以使用一些技巧,例如data URLs 但我认为实际生成电子表格会更干净。
  • 是的,这就是我害怕的...必须专门制作代码以使其表现出色。我将尝试使用开放 XML,问题是我不知道该怎么做,而且我不得不在不久前提供这个...但是感谢您的帮助...但是如果我找到了解决方案,我会在这里发布!

标签: c# html image export-to-excel


【解决方案1】:

您必须在 StringWriter 中获取图像并在字节数组中使用 System.Text.Encoding.ASCII.GetBytes(stringwriter string)。 然后将它们写为 outputStream.Write(byte_array, 0, byte_array.Length); 其中 outputstream 是 HttpContext 响应输出流。

如果您说要将 Grid、Images 全部转换为 Excel,我还没有尝试过。但是,我可以说,您可以通过他们的方式将它们单独导入 Excel。

【讨论】:

  • 我想我知道你的意思但是我如何将图像(只有一个徽标,网格上没有图像)获取到字符串?其余的我想我明白了。谢谢大佬
  • 看,这就是我目前所拥有的,但现在我在 excel 文件中找到了那些说图像无法显示的图标。 StringWriter w = new StringWriter(); HtmlTextWriter t = 新的 HtmlTextWriter(w); imgLogo.RenderControl(t); var byte_array = System.Text.Encoding.ASCII.GetBytes(w.ToString()); Response.Write(stringWrite.ToString());
【解决方案2】:

如果您使用 C# 并想导出到 Excel,我会推荐 EPPLUS

http://epplus.codeplex.com/

现在和将来都会为您省去很多麻烦。

【讨论】:

    【解决方案3】:

    试试下面的代码。我在local IIS 进行了测试,它工作正常。 在网格数据的顶部包括像Header Image/Logo 这样的图像。

    Response.ContentType = "application/vnd.ms-excel";        
    Response.AddHeader("Content-Disposition", "attachment; filename=test.xls;");                
    StringWriter stringWrite = new StringWriter();        
    HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);        
    dgrExport.DataSource = dtExport;        
    dgrExport.DataBind();
    dgrExport.RenderControl(htmlWrite);
    string headerTable = @"<Table><tr><td><img src=""D:\\Folder\\1.jpg"" \></td></tr></Table>";
    Response.Write(headerTable);
    Response.Write(stringWrite.ToString());        
    Response.End();
    

    您可以根据需要自定义图像的高度和宽度。 &lt;TD&gt; 标签需要相同的高度和宽度设置。

    【讨论】:

    • 谢谢..它帮助了我..@Arun Singh
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2017-04-30
    • 1970-01-01
    • 2021-08-21
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多