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日

c# -写入CSV文件时格式化列(单元格格式)

问题不在于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"