繁体   English   中英

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

[英]C# exporting csv with incorrect column format (Excel)

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

在此处输入图片说明

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

在此处输入图片说明


您会注意到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:

FirstName,LastName,CouponNumber,“ first”,“ last”,“ 720137994699937608”

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

"=""DATA HERE"""

例如:

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

显然,它在csv文件中不是很漂亮,但是可以根据需要将其导入excel。

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

Excel的最大精度为15位数字 将它们显示为字符串会让人厌恶吗?

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

这是步骤。

  1. 打开Excel。 单击打开,找到文件。 打开后,将显示以下屏幕。 在此处输入图片说明

  2. 选择定界,然后单击下一步。 选择其他添加(,),然后单击下一步。

在此处输入图片说明

  1. 在下一个屏幕上,突出显示该列,然后按文本。 在此处输入图片说明

这是最终结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM