【问题标题】:Exporting to excel loses the date format导出到excel会丢失日期格式
【发布时间】:2011-10-13 07:12:08
【问题描述】:

我正在将 SP 的内容导出到 excel。其中一列将日期格式设置为 08/2015,但在导出到 excel 时,格式更改为 2015 年 8 月。

我在谷歌上做了同样的事情,发现包括下面的代码就可以了;

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

导出到 excel(数据集到 excel)在下面工作;

 /// <summary>
    /// This method can be used for exporting data to excel from dataset
    /// </summary>
    /// <param name="dgrExport">System.Data.DataSet</param>
    /// <param name="response">System.Web.Httpresponse</param>
    public static void DataSetToExcel(System.Data.DataSet dtExport, System.Web.HttpResponse response, string strFileName)
    {

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

        //Clean up the response Object
        response.Clear();
        response.Charset = "";

        //Set the respomse MIME type to excel
        response.ContentType = "application/vnd.ms-excel";

        //Opens the attachment in new window
        response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName.ToString() + ".xls;");
        response.ContentEncoding = Encoding.Unicode;
        response.BinaryWrite(Encoding.Unicode.GetPreamble());

        //Create a string writer
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();

        //Create an htmltextwriter which uses the stringwriter
        System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);

        //Instantiate the datagrid

        System.Web.UI.WebControls.GridView dgrExport = new System.Web.UI.WebControls.GridView();

        //Set input datagrid to dataset table
        dgrExport.DataSource = dtExport.Tables[0];

        //bind the data with datagrid
        dgrExport.DataBind();

        //Make header text bold
        dgrExport.HeaderStyle.Font.Bold = true;

        //bind the modified datagrid
        dgrExport.DataBind();

        //Tell the datagrid to render itself to our htmltextwriter
        dgrExport.RenderControl(htmlWrite);

        response.Write(style);

        //Output the HTML
        response.Write(stringWrite.ToString());

        response.End();
    }

我在哪里做错了?请指导!

谢谢!

【问题讨论】:

    标签: asp.net visual-studio gridview export-to-excel


    【解决方案1】:

    问题不在于日期格式,Excel 根据 CELL 的 DataType (Default is GENERAL) 转换数据。为了防止数据转换,您必须提供数据类型 (TEXT) 以及数据。

    您使用了正确的代码,但样式表.text 未应用于您的数据。在所有 &lt;TD&gt; 标记上应用样式表。它将 100% 正常工作,并按您提供的原样保留您的数据 (Date- 08/2015, 0001 or any data)。

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

    【讨论】:

    • Smith,添加 ' is 会改变你的原始数据。上面的代码你试过了吗?
    • 是.... string style = @" ";工作完美
    【解决方案2】:

    这里是一些示例代码。

    Response.AddHeader("content-disposition", "attachment; filename=Report.xls");
    Response.Charset = "";
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    DataGrid g = new DataGrid();
    DataTable d = new System.Data.DataTable();
    d = (DataTable)Session["ReportData"];        
    g.DataSource = d;
    g.DataBind();       
    foreach (DataGridItem i in g.Items)
    {
        foreach (TableCell tc in i.Cells)
            tc.Attributes.Add("class", "text");
    }
    g.RenderControl(htmlWrite);
    string style = @"<style> .text { mso-number-format:\@; } </style> ";
    Response.Write(style);
    Response.Write(stringWrite.ToString());
    Response.End();
    

    【讨论】:

      【解决方案3】:

      我不太了解代码(在 asp.net 中不流利),但我会说,如果您想在 Excel 工作表中强制输入文本,您需要先将目标区域定义为文本,然后再将您的里面有数据。

      如果我对代码的理解是正确的:

      response.Write(style);
      

      需要在此之前。

      dgrExport.RenderControl(htmlWrite);
      

      编辑:也许是另一种解决方案

      您找到的那段 google 代码将单元格的格式设置为文本。您很可能希望 excel 将日期视为显示格式为 MM/YYYY 的日期。

      也许尝试替换这个:

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

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

      我不确定 / 或 \ 是否是 ASP.net 中的转义字符,因此确切的语法可能不同。在 excel 术语中,数字格式 @ 表示文本,mm/yyyy 表示具有您想要的显示格式的日期。

      【讨论】:

      • 我添加了其他东西来尝试
      猜你喜欢
      • 2013-01-23
      • 2017-07-12
      • 2015-05-21
      • 2011-01-23
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多