2013-12-06 2 views
4

я имею в моей странице контента 4 вещи:экспорт GridView, чтобы преуспеть с таможенной стоимостью форматирования

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

они работают нормально, однако я заметил странную проблему с форматированием некоторых ячеек внутри столбца, столбец имеет 2 формата, применяемых к значениям, «число» и «общий», будучи «числом» неправильным.

вот некоторые фотографии первых нескольких результатов, чтобы проиллюстрировать то, что я хочу сказать:

в SQL сервере

sql

на странице содержимого

content page

в excel

excel

обратите внимание, что в SQL-сервере и на странице, клетки отображаются с правильным форматированием, который XXXXX.etc (общего форматирования), но клетка с большим количеством цифр получить в формате «номер»

я выложу код ниже:

GridView

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView> 

экспорта на кнопку

первенствовать
protected void Buttonexcel_Click(object sender, EventArgs e) 
{ 

    try 
    { 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.Charset = ""; 
     Response.AddHeader("content-disposition", "attachment;filename=dados.xls"); 
     StringWriter sWriter = new StringWriter(); 
     HtmlTextWriter hWriter = new HtmlTextWriter(sWriter); 
     GridView1.RenderControl(hWriter); 
     Response.Output.Write(sWriter.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 
    catch (Exception ex) 
    { 
     Label1.Text = ex.ToString(); 
    } 

} 

есть способ, которым я могу заставить только «общее» форматирование для всего xls?

+0

Вы можете попробовать добавить стиль, используя Response.Write для преобразования чисел в строки. Посмотрите на эту ссылку: http://aspsnippets.com/Articles/Export-GridView-to-Excel-in-ASPNet-with-Formatting-using-C-and-VBNet.aspx – Poornima

ответ

2

@Poormina, спасибо за ваш вклад, мой код теперь:

protected void Buttonexcel_Click(object sender, EventArgs e) 
{ 

    try 
    { 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.Charset = ""; 
     Response.AddHeader("content-disposition", "attachment;filename=dados.xls"); 
     StringWriter sWriter = new StringWriter(); 
     HtmlTextWriter hWriter = new HtmlTextWriter(sWriter); 
     GridView1.RenderControl(hWriter); 
     string style = @"<style> .textmode {mso-number-format:General} </style>"; 
     Response.Output.Write(sWriter.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 
    catch (Exception ex) 
    { 
     Label1.Text = ex.ToString(); 
    } 

} 

однако форматирование Excel остается тем же, некоторые клетки отформатированы как «число» и другие, как «общий», я также пробовал:

string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 

, но результат тот же, другое дело, что я должен отметить, что не все записи в пределах ITMREF_0 должно быть как XXXXX.YYYY.ZZZZZ, я собираюсь пост скриншот ниже:

example

12000073 является правильным, и excel должен отображать его таким образом, 22284.01.01 также должны быть отображены как и в Excel

я был бы признателен за помощь

EDIT: я понял это, я просто нужно добавить:

string style = @"<style> TD { mso-number-format:\@; } </style>"; 
     Response.Write(style); 

первенствует по-прежнему дает мне предупреждение говоря о том, что число форматируется в виде текста или что у него есть апостроф, но это нормально

EDIT 2:

Как я уже сказал в первом посте, у меня также есть кнопка, которая отправляет электронное письмо с файлом excel в виде вложения, в котором есть данные gridview, я хочу сделать то же самое для этого метода, отформатируйте столбцы как «общие «Однако я не могу понять, как это сделать.

вот отправить код кнопки электронной почты:

protected void Buttonmail_Click(object sender, EventArgs e) 
{ 
    fn_AttachGrid(); 
} 

public void fn_AttachGrid() 
{ 

    StringWriter sWriter = new StringWriter(); 
    HtmlTextWriter hWriter = new HtmlTextWriter(sWriter); 
    GridView1.RenderControl(hWriter); 
    MailMessage mail = new MailMessage(); 
    mail.IsBodyHtml = true; 
    mail.To.Add(new MailAddress(txtto.Text)); 
    mail.Subject = "Foi"; 
    System.Text.Encoding Enc = System.Text.Encoding.ASCII; 
    byte[] mBArray = Enc.GetBytes(sWriter.ToString()); 
    string style = @"<style> TD { mso-number-format:\@; } </style>"; 
    Response.Write(style); 
    System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false); 
    mail.Attachments.Add(new Attachment(mAtt, "rotina.xls")); 
    mail.Body = "Foi detectado o seguinte problema"; 
    SmtpClient smtp = new SmtpClient(); 
    mail.From = new MailAddress("email_from", "name displayed"); 
    smtp.Host = "smtp.gmail.com"; 
    smtp.UseDefaultCredentials = true; 
    System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(); 
    NetworkCred.UserName = "email_from"; 
    NetworkCred.Password = "password"; 
    smtp.Credentials = NetworkCred; 
    smtp.EnableSsl = true; 
    smtp.Port = 587; 
    smtp.Send(mail); 
    ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "anything", "alert('Enviado com sucesso.');", true); 
} 

кто-то может мне помочь?

+1

Я понял, мне просто нужно было сделайте это string style = @ ""; byte [] mBArray = Enc.GetBytes (стиль + sWriter.ToString()); – user2983177

+0

в экспорт в excel Я не получаю формат или цвет, как я использую в gridiview. – SANDEEP

1

Вы можете использовать это. он работал для меня ..

foreach (GridViewRow row in dummyGridView.Rows) 
       { 
        foreach (TableCell item in row.Cells) 
        { 
         item.Attributes.Add("class", "textmode"); 
        } 
       } 
3

Это работало для меня

 var grid = new GridView(); 
     grid.DataSource = candidates; 
     grid.DataBind(); 
     Response.ClearContent(); 
     Response.AddHeader("content-disposition", "attachment; filename=candidates.xls"); 
     Response.ContentType = "application/excel"; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     grid.RenderControl(htw); 
     string style = @"<style> td { mso-number-format:\@;} </style>"; 
     Response.Write(style); 
     Response.Write(sw.ToString()); 
     Response.End(); 
Смежные вопросы