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

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

在这里输入图像描述

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

在这里输入图像描述

您会注意到,excel将优惠券号码更改为浮点数,现在优惠券号码中的数字在最后被replace为零。 这不好。

这是我的出口代码:

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("'", "'").Trim(); } 

原始txt文件csv:

名字,姓氏,优惠券号码,“第一”,“最后”,“720137994699937608”

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

 "=""DATA HERE""" 

例如:

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

很明显,它不是在csv文件漂亮,但它可以导入到你想要的excel。

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

Excel的最大精度是15位数 。 将这些string显示出来会是耻辱吗?

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

这是步骤。

  1. 打开excel。 点击打开,find文件。 一旦你打开你会得到以下屏幕。 在这里输入图像说明

  2. select分隔符,然后单击下一步。 select其他添加(,),然后点击下一步。

在这里输入图像说明

  1. 在下一个屏幕上突出显示该列并按文字。 在这里输入图像说明

这是最后的结果:

在这里输入图像说明