2012-04-20 6 views
0

Я работаю над веб-страницей, которая имеет элемент управления сеткой. Мне нужны данные, которые нужно перенести в формат .xls. Я могу создать файл .xls и передать данные, но проблема в том, что мне нужны ячейки сетки, которые будут отображаться в фоновом режиме на листе excel. Прямо сейчас, он показывает только пустой фон без gridcells. В противном случае gridview получает передачу штрафа. Из-за этой проблемы печать файла .xls является проблемой. Таблицы с большим количеством столбцов не сжимают, а печатаются более 2-3 страниц. Мой код выглядит следующим образом:Экспорт gridview в .xls

public static void ExportToXLS(string fileName, GridView gv,string companyName,string reportTitle , string period) 
    { 
     //For writing to XLS file 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); 
     HttpContext.Current.Response.ContentType = "application/ms-excel"; 

     using (StringWriter sw = new StringWriter()) 
     { 
      using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
      { 

       Table tableReport = new Table(); 
       tableReport.GridLines = gv.GridLines; 

       // add the header row to the table 
       if (gv.HeaderRow != null) 
       { 
        ReportList.PrepareControlForExport(gv.HeaderRow); 
        tableReport.Rows.Add(gv.HeaderRow); 
       } 

       // add each of the data rows to the table 
       foreach (GridViewRow row in gv.Rows) 
       { 
        ReportList.PrepareControlForExport(row); 
        tableReport.Rows.Add(row); 
       } 

       // add the footer row to the table 
       if (gv.FooterRow != null) 
       { 
        ReportList.PrepareControlForExport(gv.FooterRow); 
        tableReport.Rows.Add(gv.FooterRow); 
       } 

       //Takes value of company name 
       System.Web.UI.WebControls.Label labelCompany = new System.Web.UI.WebControls.Label(); 
       labelCompany.Text = companyName; 
       labelCompany.Font.Bold = true; 

       //Takes value of report title 
       System.Web.UI.WebControls.Label labelReport = new System.Web.UI.WebControls.Label(); 
       labelReport.Text = reportTitle; 
       labelReport.Font.Bold = true; 

       //Takes value of report period 
       System.Web.UI.WebControls.Label labelPeriod = new System.Web.UI.WebControls.Label(); 
       labelPeriod.Text = period; 

       // render the htmlwriter into the response 
       htw.Write("<center>"); 
       labelCompany.RenderControl(htw); 
       htw.Write("<br/>"); 
       labelReport.RenderControl(htw); 
       htw.Write("<br/>"); 
       labelPeriod.RenderControl(htw); 
       htw.Write("</center>"); 
       htw.Write("<br/>"); 
       tableReport.RenderControl(htw); 
       HttpContext.Current.Response.Write(sw.ToString()); 
       HttpContext.Current.Response.End(); 
      } 
     } 
    } 

Любые предложения?

+0

вы хотите показать линии сетки в xls? –

+0

, пожалуйста, не стесняйтесь принять ответ .. он позволит вам получить ответ в ближайшее время. –

+0

привет, бхавна, вы получили эту работу, потому что я тоже сталкиваюсь с той же проблемой. – rahul

ответ

0
Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition",attachment;filename=GridViewExport.xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 

    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 
1

Ref: Export grid

Попробуйте это:

protected void btnExportExcel_Click(object sender, EventArgs e) 

    {  

     Response.Clear(); 
     Response.Buffer = true; 

     Response.AddHeader("content-disposition", 

     "attachment;filename=GridViewExport.xls"); 

     Response.Charset = ""; 

     Response.ContentType = "application/vnd.ms-excel"; 

     StringWriter sw = new StringWriter(); 

     HtmlTextWriter hw = new HtmlTextWriter(sw); 

     grdExport.AllowPaging = false; 

     oMailing.GetData(out ODs); 

     grdExport.DataSource = ODs; 

     grdExport.DataBind(); 

     //Change the Header Row back to white color 

     grdExport.HeaderRow.Style.Add("background-color", "#FFFFFF"); 

     //Apply style to Individual Cells 

     grdExport.HeaderRow.Cells[0].Style.Add("background-color", "green"); 

     grdExport.HeaderRow.Cells[1].Style.Add("background-color", "green"); 

     grdExport.HeaderRow.Cells[2].Style.Add("background-color", "green"); 

     grdExport.HeaderRow.Cells[3].Style.Add("background-color", "green"); 

     grdExport.HeaderRow.Cells[4].Style.Add("background-color", "green"); 

     grdExport.RenderControl(hw); 

     //style to format numbers to string 

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

     Response.Write(style); 

     Response.Output.Write(sw.ToString()); 

     Response.Flush(); 

     Response.End(); 

    } 
+0

привет .. есть ли способ обернуть текст заголовка в excel ??. – kk1076

0

Все ответы будут получить, что вы хотите - вы просто отсутствует часть форматирования.

В конце дня то, что вы действительно создаете, представляет собой HTML-файл (с таблицей HTML), который может читать Excel. Заголовки RESPONSE в @BhaskarreddyMule - это то, что «заставляет» обрабатывать файл как файл «xls», и если он запускает Excel и открывает его (но в итоге его не является «родным» файлом Excel .

Теперь это не в порядке, подумайте в HTML. Создайте свои столбцы, строки и текстовое содержимое так же, как в HTML. Вот как вы можете управлять форматом (например, старой школы «nowrap», чтобы предотвратить обертывание ячейки содержимое, размер шрифта и т. д.).

Я не делал этого через некоторое время (я перешел к XML-литералам Excel XML и VB.Net, когда мне это нужно) m не уверен, сколько уровня контроля у вас есть с RenderControl ... или если вам нужно пойти еще дальше «старой школы» и создать HTML-таблицу e строка с нуля .....

+0

Я застрял в этой точке.Как вы используете Excel XML? Могу ли я использовать его с инфраструктурой asp.net? – bhavna

+0

«RenderControl» будет вашим первым выбором - данные уже находятся на странице (нет необходимости делать другой вызов данных). Мой комментарий о том, что это был отказ от ответственности за то, как вы можете получить доступ к «RenderControl» (потому что я лично не могу предоставить более полезную информацию). Оформить заказ @NiranjanKala ответ. Да, это все .Net, C# или VB.Net. Это просто, что в VB.net, с его [XML Literals goodness] (http://msdn.microsoft.com/en-us/vstudio/Video/bb927708) его небо (магия в видеоролике около 5:00). Если вы это сделаете, обратите внимание на предостережение выше, и вы в значительной степени надеетесь, что у каждого есть Excel. – EdSF

0

Прежде всего Refer this: How to export nested gridview to excel/word with gridlines on the child grid, надеюсь, что это поможет вам решить вашу проблему.

Ref: How to export gridview to excel in a console type application?

Вы можете обратиться к элементу управления Экспорт в Excel в ссылке ниже. Это настраиваемый элемент управления. Надеюсь, это может вам помочь.

http://exporttoexcel.codeplex.com/

Styling exported grid:

protected void btnExportExcel_Click(object sender, EventArgs e) 
     { 
      Response.Clear(); 
      Response.Buffer = true; 

      Response.AddHeader("content-disposition", 
      "attachment;filename=GridViewExport.xls"); 

      Response.Charset = ""; 
      Response.ContentType = "application/vnd.ms-excel"; 
      StringWriter sw = new StringWriter(); 
      HtmlTextWriter hw = new HtmlTextWriter(sw); 

      grdExport.AllowPaging = false; 
      oMailing.GetData(out ODs); 
      grdExport.DataSource = ODs; 
      grdExport.DataBind(); 

      //Change the Header Row back to white color 
      grdExport.HeaderRow.Style.Add("background-color", "#FFFFFF"); 

      //Apply style to Individual Cells 
      grdExport.HeaderRow.Cells[0].Style.Add("background-color", "green"); 

      grdExport.HeaderRow.Cells[1].Style.Add("background-color", "green"); 

      grdExport.HeaderRow.Cells[2].Style.Add("background-color", "green"); 

      grdExport.HeaderRow.Cells[3].Style.Add("background-color", "green"); 

      grdExport.HeaderRow.Cells[4].Style.Add("background-color", "green"); 

      for (int i = 0; i < grdExport.Rows.Count; i++) 
      { 
       GridViewRow row = grdExport.Rows; 

       //Change Color back to white 
       row.BackColor = System.Drawing.Color.White; 

       //Apply text style to each Row 
       row.Attributes.Add("class", "textmode"); 

       //Apply style to Individual Cells of Alternating Row 
       if (i % 2 != 0) 
       { 
        row.Cells[0].Style.Add("background-color", "#C2D69B"); 
        row.Cells[1].Style.Add("background-color", "#C2D69B"); 
        row.Cells[2].Style.Add("background-color", "#C2D69B"); 
        row.Cells[3].Style.Add("background-color", "#C2D69B"); 
        row.Cells[4].Style.Add("background-color", "#C2D69B"); 
       } 

      } 
      grdExport.RenderControl(hw); 
      //style to format numbers to string 
      string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
      Response.Write(style); 
      Response.Output.Write(sw.ToString()); 
      Response.Flush(); 
      Response.End(); 
     } 
0

Я попытался с экспортом, чтобы преуспеть, кажется, что сначала надо создать, используя часть Excel = using Microsoft.Office.Interop.Excel, когда и нажать на кнопку, просто создать класс первенствовать имея свойство рабочей книги и рабочего листа, а затем используя свойство gridview Gridview.Row[].cell[].Text., вы можете динамически сохранять каждое значение в gridview на листе, а затем записывать его в FILE ....

Смежные вопросы