2011-05-02 42 views
2

我想导出一个gridview表格为excel格式。
,我发现最简单,最快速前进的解决方案是从数学Berseth
http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.htmlGridView与从字节检索的图像

这个解决方案正常工作,被客户所接受。但现在,几个月后,一个新的功能被要求:“只需在Excel中放置一个图像标识”

这让我大吃一惊。我不能把System.Drawing.Image放在System.Web.UI.WebControls.Image中,因为它们完全不同,但是我不能只放一个Path,因为生成的Excel会通过电子邮件发送所以不能考虑目录结构。

那么,我可以把从GridView中的字节检索到的图像导出到数学模型中,还是以其他方式存在?

编辑..

我走了几步,但我仍然远离我的目标。 使用字符串的Base64在HTML文件中,我可以嵌入图像

喜欢的东西:

private string MakeImageSrcData(string filename) { 
    FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); 
    byte[] filebytes = new byte[fs.Length]; 
    fs.Read(filebytes, 0, Convert.ToInt32(fs.Length)); 
    return "data:image/png;base64," + Convert.ToBase64String(filebytes, Base64FormattingOptions.None); 
} 

...

string base64 = MakeImageSrcData("D:\\Proj\\top_title.png"); 
TableRow tr = new TableRow(); 
TableCell tc = new TableCell(); 
Image logoEmpresa = new Image(); 
logoEmpresa.ImageUrl = base64; 
tc.Controls.Add(logoEmpresa); 
tr.Cells.Add(tc); 
table.Rows.Add(tr); 

这正常工作与IE和FF,但没有丝毫的Excel:/

我试过电子表格xml,但是正如MSDN描述的那样here不支持图像类型。

其他一些想法?

回答

1

该方法通过输出gridview作为包含HTML表格的文本来工作。我想你可以在字符串前加上一个字符串,其中包含一个<img>标签,指向可访问网站某处的标识。

试试看。

评论

我加在GridViewExportUtil.cs下面前行61文件中引用的演示:

HttpContext.Current.Response.Write("<img src='http://localhost/WebApplication2/wand.gif' />"); 

的形象是可以在指定的URL,并在Excel中正确呈现。

+0

不错,我在这想。实际上,我可以使用System.Web.UI.WebControls.Image并将控件放入TableRow中。但是因为我在intranet env工作,所以我无法用可访问的网站来计数。 – Custodio 2011-05-02 20:27:33

+0

@Luis:'Image'控件最终将呈现为HTML''标记,并且将受到与任何图像相同的限制。我不确定是否有方法将图像编码为与页面嵌入*。我也为Intranet环境编写应用程序,并发现将图像放置在与生成网格视图的页面相同的Web应用程序中通常足以让我的Intranet客户满意。如果不是,我建议尝试公司的公共网站或一些异地托管。 – kbrimington 2011-05-02 20:35:26

+0

我发现了一种将图像嵌入到html中使用字符串base64的方法。直到使用Internet Explorer和Firefox工作正常,但与Excel无关。我尝试过电子表格XML,但不支持图像内容。我一直没有在Excel中嵌入图像的解决方案。 – Custodio 2011-05-04 19:58:48