Экспорт страницы в Excel с логотипом - PullRequest
4 голосов
/ 17 февраля 2011

Мне нужно экспортировать некоторые данные со страницы asp.net, чтобы преуспеть, поэтому я использую в основном таблицу для создания пользовательских заголовков, а затем GridView. Все данные отображаются правильно при экспорте в Excel, но когда я добавил изображение логотипа в HTML, оно не отображается в файле Excel при экспорте.

Поскольку мне нужно экспортировать его в Excel 2007 или более позднюю версию, я знаю, что могу использовать материал Open XML от Microsoft для экспорта данных, проблема в том, что у меня уже все сделано в коде, и я хотел знать, есть ли это еще один способ сделать это вместо того, чтобы делать все заново, используя 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();

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

Попробуйте следующий код.Я проверил на 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();

вы можете настроить высоту и ширину изображения в соответствии с вашими требованиями.Для тега <TD> потребуется такая же высота и ширина.

0 голосов
/ 17 февраля 2011

Если вы используете C # и хотите экспортировать в Excel, я бы порекомендовал EPPLUS

http://epplus.codeplex.com/

Избавит вас от множества неприятностей сейчас и в будущем.

0 голосов
/ 17 февраля 2011

Вы должны получить изображения в StringWriter и использовать System.Text.Encoding.ASCII.GetBytes (строка stringwriter) в массиве байтов. затем запишите их как outputStream.Write (byte_array, 0, byte_array.Length); где outputtream - это выходной поток ответа HttpContext.

Если вы говорите, чтобы преобразовать сетку, изображения, все в одном идти в Excel, я не пробовал. Но, я могу сказать, вы можете по отдельности поместить их обоих в Excel по-своему.

...