【问题标题】:Export Excel : Avoid stripping the leading zeros导出 Excel:避免去除前导零
【发布时间】:2012-07-19 11:08:12
【问题描述】:

我在 C#.Net 中将数据导出到 Excel 工作表。我有一个列,其中包含“00123450098”之类的数据。导出的数据没有第一个零。我想按原样显示数据。

这是我的导出 excel 代码。

 string style = @"<style> .text { mso-number-format:\@; } </style> ";
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";
    HtmlForm frm = new HtmlForm();
    ...................
    ...................
     table.RenderControl(htw);
            HttpContext.Current.Response.Write(style);
            //render the htmlwriter into the response
            HttpContext.Current.Response.Write(sw.ToString());
            HttpContext.Current.Response.End();

【问题讨论】:

    标签: c#-4.0


    【解决方案1】:

    我使用StackOverflow linkblog 的组合找到了我的答案。 有一些 excel 格式样式可以应用于 rowdatabound 上的 gridview。我使用了这些,现在我的导出不会去掉前导零。

    以下是我的代码示例。

    ExpenseResultsGrid.RowDataBound += new GridViewRowEventHandler(ExpenseResultsGrid_RowDataBound);
    
            protected void AllQuartersGrid_RowDataBound(对象发送者,GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {//添加此样式以防止在导出到excel期间截断基金代码中的前导零
                    e.Row.Cells[2].Attributes.CssStyle.Add("mso-number-format", "\\@");
                }
            }

    【讨论】:

      【解决方案2】:

      导出到excel时,在插入值前加上\t即可解决问题。 例如:

      string test = "000456";
      string insertValueAs = "\t" + test;
      

      然后字符串测试将被视为字符串值而不是整数值。因此,它将保留前导零。

      我遇到了同样的问题,上面的解决方案对我有用。希望这篇文章对您有所帮助!

      【讨论】:

      • 嘿@viacheslav,将“\t”附加到数据对我不起作用,它仍在删除从零开始。
      【解决方案3】:

      我也有这个问题。我想出的解决方案是在使用 excel 的内置 char() 函数时隐藏前导零。在 excel 中,char() 返回传递给它的 ASCII 字符代码的值,因此 char(048) 返回 0。 在导出到 excel 之前,像这样添加变量...

      varName = "=CHAR(048)&" + varName;
      

      【讨论】:

        【解决方案4】:

        如果导出为 CSV / TSV,请将其放入每个包含文本“数字”的单元格中,该数字带有前导 0 或(尤其是)16 位以上的数字:

        ="0012345"

        ..其中 0012345 是您要导出到该单元格的数字。

        我希望我能记得我在哪里看到的。

        【讨论】:

          【解决方案5】:

          导出时,只需在插入的值前添加一个空字符串,如“”:

          string x = "000123";
          myWorksheet.Cells[1,1] = "" + x;
          

          【讨论】:

          • 没用。输出相同的整数,不带前导零。
          【解决方案6】:

          在 Excel 文件中,数字单元格总是去掉前导零,您可以通过单引号来设置带有前导零的数字。即

          00123450098 到 '00123450098

          然后,该单元格的格式将更改为文本。 如果您生成的 excel 文件有任何公式,其中包含该单元格引用作为数字,那么它将无法按预期工作。

          【讨论】:

          • 我检查了这个..但是单引号也导出到 excel...如何避免这种情况..
          • 是的,这个单引号也会导出显示前导零,如果您不想放置单引号,那么您应该在代码中为单元格提供数字格式。
          猜你喜欢
          • 1970-01-01
          • 2014-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多