我正在将完整数据的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(""", "\"" + "\"");
strInput = strInput.Replace("&", "&");
strInput = strInput.Replace(" ", string.Empty);
strInput = strInput.Replace("''", "'");
return strInput.Replace("'", "'").Trim();
}
原始txt文件csv:
名字,姓氏,CouponNumber, “第一”, “最后”, “720137994699937608”
答案 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之前将该列转换为文本。
这是步骤。
打开excel。单击“打开”,找到该文件。打开后,您将看到以下屏幕。
选择“分隔”,然后单击“下一步”。选择其他添加(,),然后单击下一步。
这是最终结果: