在c#中导出到excel之前更改列的数据类型

时间:2013-12-17 15:29:46

标签: c# asp.net gridview export-to-excel

我正在尝试将gridview导出为C#中的excel。但是有些列的数据类似于0005467.所以当我尝试将Gridview导出到Excel时,列中的数据变为5467,因为它正在处理此列作为数字而不是字符串。有时当最后有很多0时,它会将该数字视为指数。我不希望此列更改,因为这些是ID。 在将整个gridview导出为ex​​cel之前,有没有办法在c#中更改所选列的数据类型?

我将Gridview导出到Excel的代码:

Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + fname + ".xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

我试过插入

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

在上面的代码中但没有用。

请帮忙!

2 个答案:

答案 0 :(得分:2)

您好,如果您想更改列的数据类型, 首先,您需要记住,如果该表已有数据,则无法更改故事中列的数据类型。您可以做的是先克隆表并分配给另一个表(新表)。然后更改新表的数据类型,并将第一个表中的所有数据复制到新创建的表中。

这是一个演示,对于相同的导出和导入excel,我正在使用它。

    using (OleDbConnection conn = new OleDbConnection(excelConnectionString))
    {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand(query, conn);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        //This is the initial table
        DataTable dtDetails = new DataTable();
        da.Fill(dtDetails);

        //This is the table for whom i need to change the datatype of columns
        DataTable dtCloned = dtDetails.Clone();
        dtCloned.Columns["myColumn1"].DataType = System.Type.GetType("System.String");
        dtCloned.Columns["myColumn2"].DataType = System.Type.GetType("System.String");

        //Copy all data from first table to this new table
        foreach (DataRow dr in dtDetails.Rows)
        {
            dtCloned.Rows.Add(dr.ItemArray);
        }

        GridProjectDetails.DataSource = dtCloned;
        GridProjectDetails.DataBind();

       //Then you can export this Grid
    }

答案 1 :(得分:0)

尝试导出为csv格式而不是excel(.xls)

为此你需要改变内容类型,在第2行使用下面一行。

Response.AddHeader(“content-disposition”,“attachment; filename =”+ fname +“。csv”)