2014-10-24 6 views
0

Я хочу экспортировать gridview в excel 2007, код, который я использую, может импортировать в excel 2007 с помощью приложения типа mime/vnd.ms-excel (excel 2003), но я получаю предупреждение msg что «Файл, который вы пытаетесь открыть, находится в другом формате ...», с да и нет, чтобы клик, нажав кнопку «Да», файл открывается, купите, у меня не может быть этого msg для клиентов. И с помощью mime type for excel 2007 (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet), файл даже не открывается. «Excel не может открыть файл, потому что формат или расширение недействительны».Экспорт GridView в Excel 2007

Это код, я использую прямо сейчас:

using System; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.IO; 
using System.Drawing; 


namespace TesteFornecedores 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!this.IsPostBack) 
      { 
       this.BindGrid(); 
      } 
     } 

     private void BindGrid() 
     { 
      using (DataSet ds = new DataSet()) 
      { 
       ds.ReadXml(Server.MapPath("~/Customers.xml")); 
       GridView1.DataSource = ds; 
       GridView1.DataBind(); 
      } 
     } 


     protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
     { 
      GridView1.PageIndex = e.NewPageIndex; 
      this.BindGrid(); 
     } 




     protected void ExportToExcel(object sender, EventArgs e) 
     { 
      Response.Clear(); 
      Response.Buffer = true; 
      Response.AddHeader("content-disposition", "attachment; filename=ExcelList"); 
      Response.Charset = ""; 
      Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      using (StringWriter sw = new StringWriter()) 
      { 
       HtmlTextWriter hw = new HtmlTextWriter(sw); 

       //To Export all pages 
       GridView1.AllowPaging = false; 
       this.BindGrid(); 

       GridView1.HeaderRow.BackColor = Color.White; 
       foreach (TableCell cell in GridView1.HeaderRow.Cells) 
       { 
        cell.BackColor = GridView1.HeaderStyle.BackColor; 
       } 
       foreach (GridViewRow row in GridView1.Rows) 
       { 
        row.BackColor = Color.White; 
        foreach (TableCell cell in row.Cells) 
        { 
         if (row.RowIndex%2 == 0) 
         { 
          cell.BackColor = GridView1.AlternatingRowStyle.BackColor; 
         } 
         else 
         { 
          cell.BackColor = GridView1.RowStyle.BackColor; 
         } 
         cell.CssClass = "textmode"; 
        } 
       } 

       GridView1.RenderControl(hw); 

       //style to format numbers to string 
       string style = @"<style> .textmode { } </style>"; 
       Response.Write(style); 
       Response.Output.Write(sw.ToString()); 
       Response.Flush(); 
       Response.End(); 
      } 
     } 

     public override void VerifyRenderingInServerForm(Control control) 
     { 
      /* Verifies that the control is rendered */ 
     } 
    } 
} 

Кто-то знает решение баночной помочь мне открыть в Excel 2007 это GridView?

Спасибо.

ответ

0

Вы не экспортируете в настоящий формат Excel. Вы создаете HTML-файл, и поскольку вы предоставляете MIME-тип, который Excel знает, как обрабатывать, Excel пытается открыть его. Excel знает, как читать базовые файлы HTML, но управлять форматированием сложно, и вы получите это предупреждение.

Вместо этого вам нужно сгенерировать файлы .xlsx, используя библиотеку, которая может их генерировать для вас. Примерами этого могут служить EPPlus и Open Office XML SDK. Обратите внимание, что вам нужно избегать использования решений на основе Excel Interop, поскольку они не поддерживаются Microsoft на стороне сервера, их будет сложно отладить, и они вызовут головные боли.

Кстати, не думайте об этом как о «экспорте GridView». Это плохой подход. GridView - это элемент пользовательского интерфейса для отображения данных в HTML. Подумайте об этом вместо этого как «как я могу экспортировать эти данные?» В вашем случае подумайте об этом как об экспорте данных DataSet или XML.

0
 Response.Clear(); 
     Response.ContentType = "application/excel"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
     Response.BinaryWrite(objectData);//objectData is binary data 
     Response.End(); 

Ваш ответ должен быть таким. Я уверен, что ваш код не будет работать, потому что вы не даете действительный файл excel для ответа, читайте около OleDbConnection

Используйте свой DataSet из DataSource Grid. После этого построить OleDbConnection

OleDbConnection conn = new OleDbConnection(); 


string connectString = String.Format(
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR={1};'", 
        fileName, "YES"); 

       conn.ConnectionString = connectString; 
       conn.Open(); 

OleDbCommand comm = new OleDbCommand(); 
comm.CommandText = string.Format("CREATE TABLE [{0}] ", "TableName"); 

Добавить столбцы из DataSet в comm.CommanText. Чтобы построить реплику структуры столбцов dataSet. После этого:

comm.Connection = conn; 
comm.ExecuteNonQuery(); 

Теперь у вас есть таблица, созданная с теми же столбцами, что и ваш набор данных.

Теперь вы должны обновить содержание

  OleDbDataAdapter ad = new OleDbDataAdapter(
       string.Format("SELECT * FROM [{0}]", "TableName"), conn); 
      OleDbCommandBuilder builder = new OleDbCommandBuilder(ad); 
      builder.QuotePrefix = "["; 
      builder.QuoteSuffix = "]"; 

      // Saves the data set 
      ad.Update(DataSetFromTheGrid); 

Теперь вы заполнили таблицу с данными. // знать fileName совпадает с именем файла в строке подключения! FileStream fs = новый FileStream (fileName, FileMode.Open, FileAccess.Read);

  BinaryReader reader = new BinaryReader(fs); 
      excelBytes = reader.ReadBytes((int)fs.Length); 
      //after the returned bytes it will be good to delete the file ! 

Вернуть эти байты в ответ, и у вас есть файл Excel.

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