Экспорт в Excel поможет в GridView - PullRequest
2 голосов
/ 06 января 2011

Я реализовал функциональность для экспорта данных из таблицы сетки в таблицу Excel в приложении .net. Рендеринг вывода таблицы сетки на странице приведен ниже:

alt text

не беспокойтесь о верхнем и нижнем колонтитулах, так как я показываю небольшую часть gridview. и данные экспортируются в Excel-лист:

alt text

Код на странице aspx предназначен для определенного столбца валюты в сетке:

<asp:TemplateField HeaderText="Value" >
    <HeaderStyle HorizontalAlign="Left" CssClass="lblBoldTextLeftPadding clsGridHeaderDashboard" />
    <ItemTemplate>
        £<%# Eval("Value") %>
    </ItemTemplate>
    <ItemStyle CssClass="lblNormalTextLeftPadding" Width="10%" VerticalAlign="Top" HorizontalAlign="Left" />
</asp:TemplateField>

Как видно из таблицы Excel, столбец валюты имеет значение [Â 100 фунтов стерлингов], но в виде таблицы [£ 100].

Может ли кто-нибудь подсказать мне, как мы можем удалить «В» из вывода Excel-листа.

Я использую следующий код для экспорта функциональности:

Response.Clear()
Response.AddHeader("content-disposition", "attachment;filename=Report.xls")
Response.Charset = ""
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentType = "application/vnd.xls"
Dim objStringWriter As StringWriter = New StringWriter(sb)
Dim objHtmlTextWriter As HtmlTextWriter = New HtmlTextWriter(objStringWriter)
gvBidTrackingExcel.DataSource = Getdata()
gvBidTrackingExcel.DataBind()
gvBidTrackingExcel.RenderControl(objHtmlTextWriter)
Response.Write(objStringWriter)
Response.End()

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Попробуйте установить кодировку и тип кодировки после вашего Response.ContentType:

HttpContext.Current.Response.Charset = "utf-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");

В противном случае:

Если это не работает, попробуйте установить ихкак текстовое поле.Может быть, они отображаются как float / doubles.

Вот пример итерации, которая устанавливает класс для всех ячеек перед экспортом (Вы должны настроить мои образцы, чтобы они работали для вашего решения)

foreach(GridViewRow row in gridView.Rows)
{
    if(row.RowType == DataControlRowType.DataRow)
    {
        for(int columnIndex = 0; columnIndex < row.Cells.Count; columnIndex++)
        {
            row.Cells[columnIndex].Attributes.Add("class", "text");
        }
    }
}

Добавьте класс стилей в ваш документ после рендеринга вашего GridView

table.RenderControl(htmlTextWriter);
string style = @"<style> .text { mso-number-format:\@; text-align:left; } </style> ";
HttpContext.Current.Response.Write(style);
0 голосов
/ 03 января 2013

У меня была точно такая же проблема, когда я заменил £ на версию в юникоде, то есть £, похоже, добился цели, т.е.

myTempStr = Replace(myTempStr, "£", "&amp;#163;")
...