将GridView导出到Excel 2007

我想导出一个gridview到excel 2007,我使用的代码可以导入到mime类型应用程序/ vnd.ms-excel(excel 2003)的excel 2007中,但是我得到一个警告信息,说“你正在尝试的文件打开是在不同的格式...“,与是和否到clic,单击是的文件打开,购买我不能有这msg为customers.And使用MIME类型的Excel 2007(application / vnd .openxmlformats-officedocument.spreadsheetml.sheet)文件甚至没有打开“Excel无法打开文件,因为格式或扩展无效”。

这是我现在使用的代码:

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?

谢谢。


您不会导出为实际的Excel格式。 您正在创建HTML文件,并且由于您提供了Excel知道如何处理的MIME类型,因此Excel会尝试打开它。 Excel确实知道如何阅读基本的HTML文件,但是很难控制格式,你会得到这个警告信息。

相反,你需要做的是生成你的.xlsx文件是使用一个库,可以为你生成它们。 这方面的例子是EPPlus和Open Office XML SDK。 请注意,您需要避免使用基于Excel Interop的解决方案,因为Microsoft在服务器端不支持这些解决方案,它们将很难调试,并且会引起麻烦。

顺便说一句,不要认为它是“导出GridView”。 这是一个不好的方法。 GridView是用于在HTML中显示数据的UI元素。 把它想成是“我如何导出这些数据?” 在你的情况下,将其视为导出DataSet或XML类型数据。


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

你的回应应该是这样的。 我很确定你的代码不会工作,因为你没有给响应的有效Excel文件,阅读有关OleDbConnection

使用Grid的DataSource中的DataSet。 之后建立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与连接字符串中的fileName相同! FileStream fs = new 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文件。

链接地址: http://www.djcxy.com/p/46859.html

上一篇: Export GridView to Excel 2007

下一篇: asp.net download excel file in IE6