C#导出csv的列格式不正确(Excel)

时间:2014-07-24 21:12:28

标签: c# asp.net excel

我正在将完整数据的gridview导出到CSV文件,其中一列包含最多18位数的非优惠券,非浮动点。该号码需要在 Excel 中显示为全部 csv文件。当我在Excel 中打开csv文件时,例如,720137994699937608,其他文件显示为:

enter image description here

然后,当我调整列大小或将列类型更改为数字时,优惠券号码显示为:

enter image description here


您会注意到excel将优惠券号码更改为浮点数,现在优惠券号码中的数字已在最后用零替换。这很糟糕。

这是我的导出代码:

protected void btnExport_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition",
             "attachment;filename=Reports All Prizes.csv");
            Response.Charset = "";
            Response.ContentType = "csv";

            StringBuilder sb = new StringBuilder();

            sb.Append("FirstName" + ',');
            sb.Append("LastName" + ',');
            sb.Append("CouponNumber" + ',');
            string[] splitColumns = sb.ToString().Split(new Char[] { ',' });
            //append new line
            sb.Append("\r\n");

            for (int i = 0; i < gvReportsAllPrizes.Rows.Count; i++)
            {
                foreach (string column in splitColumns)
                {
                    if (column == "FirstName")
                    {
                        //capatilize first letter.
                        string first = Globals.ReplaceHTML(gvReportsAllPrizes.Rows[i].Cells[1].Text.Trim());
                        if (string.IsNullOrEmpty(first))
                        {
                            first = "";
                        }
                        if (!string.IsNullOrEmpty(first))
                        {
                            first = first.ToLower();//convert to lowercase before uppercasing the first letter.
                            first = "\"" + first.First().ToString().ToUpper() + String.Join("", first.Skip(1)) +
                                "\"";
                        }
                        sb.Append(first + ',');
                    }
                    else if (column == "LastName")
                    {
                        //capatilize first letter.
                        string last = Globals.ReplaceHTML(gvReportsAllPrizes.Rows[i].Cells[2].Text.Trim());
                        if (string.IsNullOrEmpty(last))
                        {
                            last = "";
                        }
                        if (!string.IsNullOrEmpty(last))
                        {
                            last = last.ToLower();//convert to lowercase before uppercasing the first letter.
                            last = "\"" + last.First().ToString().ToUpper() + String.Join("", last.Skip(1)) +
                                "\"";
                        }
                        sb.Append(last + ',');
                    }
                    else if (column == "CouponNumber")
                    {
                        string cn = Globals.ReplaceHTML(gvReportsAllPrizes.Rows[i].Cells[8].Text.Trim());
                        if (string.IsNullOrEmpty(cn))
                        {
                            cn = "";
                        }
                        if (!string.IsNullOrEmpty(cn))
                        {
                            sb.Append("\"" + cn + "\"" + ',');
                        }
                        else
                        {
                            sb.Append(cn + ',');
                        }
                    }

                }
                //append new line
                sb.Append("\r\n");
            }
            Response.Output.Write(sb.ToString());
            Response.Flush();
            Response.End();
        }

public static string ReplaceHTML(string strInput)
{
    strInput = strInput.Replace("&quot;", "\"" + "\"");
    strInput = strInput.Replace("&amp;",  "&");
    strInput = strInput.Replace("&nbsp;", string.Empty);
    strInput = strInput.Replace("''", "'");
    return strInput.Replace("&#39;", "'").Trim();
}

原始txt文件csv:

名字,姓氏,CouponNumber, “第一”, “最后”, “720137994699937608”

4 个答案:

答案 0 :(得分:3)

您可以像这样包装每个值:

"=""DATA HERE"""

例如:

Column1,Column2
"=""1231231231231323121321""","=""123"""

显然它在csv文件中并不漂亮,但它可以根据需要导入到excel中。

答案 1 :(得分:3)

如果您使用的是CSV文件,则无法执行任何操作。正如其他人所提到的,这是一个Excel格式问题。如果您想管理文档的格式,我建议使用某种Excel库。

答案 2 :(得分:0)

Excel的最高精度为15 digits。将这些显示为字符串会不会感到诅咒?

答案 3 :(得分:0)

如果不需要CSV文件,您可以直接将gridview导出到excel。但是,如果您仍然需要csv文件,则在excel列中显示长号的最简单方法是在将csv导入excel之前将该列转换为文本。

这是步骤。

  1. 打开excel。单击“打开”,找到该文件。打开后,您将看到以下屏幕。 enter image description here

  2. 选择“分隔”,然后单击“下一步”。选择其他添加(,),然后单击下一步。

  3. enter image description here

    1. 在下一个屏幕上突出显示该列并按文字。 enter image description here
    2. 这是最终结果:

      enter image description here