c# -写入CSV文件时格式化列(单元格格式)
本文关键字:单元格 格式 格式化 写入 CSV 文件 | 更新日期: 2023-09-27 17:51:08
编写了数据导出为csv文件的方法。如果单元格的值在csv中有DEC20
,则将其获取为20-Dec
,这是不正确的。
for (int i = 0; i < myData.Count(); i++)
{
sb.AppendLine(string.Join(delimiter,
Common.FormatExportString(myData[i].Code),
Common.FormatExportString(myData[i].Name),
Common.FormatExportString(myData[i].Description)));
}
//returns the file after writing the stream to the csv file.
return File(new System.Text.UTF8Encoding().GetBytes(sb.ToString()), "text/csv", fileName);
请帮助我获得使用c#在excel (csv)文件中显示的确切string
格式。
交货:myData[我]。名称数据将为
DEC20,或2-5
,
但是csv(excel)的输出显示为
12月20日和5月5日
问题不在于csv导出,如果你用记事本打开csv文件,它是格式良好的。Excel会自动将单元格类型检测为日期并将其显示为日期。
要避免这种行为,请在引号之间包装文本并在其前面放置=
,如下所示:
= "DEC20"
文件应该变成
= "field1", = "field2", = "field...", = "DEC20", ...
你的方法应该变成:
for (int i = 0; i < myData.Count(); i++)
{
sb.AppendLine(string.Join(delimiter,
" = '"",
Common.FormatExportString(myData[i].Code),
Common.FormatExportString(myData[i].Name),
Common.FormatExportString(myData[i].Description)
"'""));
}
//returns the file after writing the stream to the csv file.
return File(new System.Text.UTF8Encoding().GetBytes(sb.ToString()), "text/csv", fileName);
CSV是一种非常简单的格式,它允许Excel在文本上应用默认格式。我建议你写你的Excel文件没有使用CSV,但Excel API你应该指定你想要如何格式化单元格。
Excel COM对象将允许您编写本机Excel文件。你可以在这里读到:http://social.msdn.microsoft.com/forums/en - us/csharpgeneral/thread/ef11a193 - 54 - f3 - 407 - b - 9374 - 9 - f5770fd9fd7
问题不在于CSV输出,
问题是Excel"太聪明了",自动检测数据类型并推断DEC20是"12月20日",即使它不是!
您可以通过在文本前添加'来指示Excel的文本列。为"'my Val", "'Dec10", "'54/40/2042", "'22/7/2013", "439.54"
所有这些都将被视为文本,而不是日期/数字或其他任何内容。
欢呼
如果字符串被折叠,应该以正确的方式操作字符串,以便被excel接受。
如果字符串有,单引号(")添加"'ur string'",并与整体字符串应在="your string with so all special characters and the commas"