Excel工作表不显示导出图表图像 – ASP.NET

我在我的网站上有一个网页,允许我从该页面下载图表并将其添加到Excel表格。 但是,会显示一个红色的xbutton,其中包含文字“此图片目前无法显示”,而不是图表。 我在网上尝试了很多解决scheme,但都显示出相同的结果。

这是我的代码:

protected void ExcelDl_Click(object sender, EventArgs e) { string tmpChartName = "test2.jpg"; string imgPath = HttpContext.Current.Request.PhysicalApplicationPath + tmpChartName; Chart1.SaveImage(imgPath); string imgPath2 = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/" + tmpChartName); Response.Clear(); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment; filename=test.xls;"); StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); string headerTable = @"<Table><tr><td><img src='" + imgPath2 + @"' \></td></tr></Table>"; Response.Write(headerTable); Response.Write(sw.ToString()); Response.End(); } 

任何forms的帮助将不胜感激。 另外,请注意,我已经在我的Web.config中添加了所需的代码。

我们已经试过你的程序,这里工作正常。 Excel随图像下载。 我已经安装在iis和许多客户端机器尝试,它工作正常。

不知道到底是怎么回事。 这个问题可能是错误的图像path引用会导致这个问题。 打印图片url,并确认它是否正确。

替代方法:而不是在Excel单元格内使用HTML标签使用XMLclosures方法来呈现Excel单元格内的图像。

在这里,我已经添加了封闭XML方法的示例代码,以在Excel中呈现图像。 使用此代码需要引用以下DLL 1. ClosedXML.dll 2. WindowsCore.dll 3. DocumentFormat.OpenXML.dll 4. PresentationCore.dll

closuresXML方法的参考链接: https : //closedxml.codeplex.com/

  using (XLWorkbook wb = new XLWorkbook()) { IXLWorksheet WorkSheet = new IXLWorksheet(); string LogoPath = Server.MapPath("~/App_Themes/Images/logonew.png"); System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(LogoPath); if (bitmap != null) { var stream = new System.IO.MemoryStream(); bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Gif); if (stream != null) { stream.Position = 0; XLPicture pic = new XLPicture { NoChangeAspect = true, NoMove = true, NoResize = true, ImageStream = stream, Name = "Logo", EMUOffsetX = 4, EMUOffsetY = 6 }; XLMarker fMark = new XLMarker { ColumnId = 1, RowId = 1 }; pic.AddMarker(fMark); WorkSheet.AddPicture(pic); } } Response.Clear(); Response.Buffer = true; Response.Charset = ""; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=test.xls"); using (MemoryStream MyMemoryStream = new MemoryStream()) { wb.SaveAs(MyMemoryStream); MyMemoryStream.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } } 

请检查并让我知道您的意见。