写入CSV文件时的C#格式列(单元格格式)

时间:2013-01-10 09:18:49

标签: c# .net string

编写了将数据导出到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 [i] .Name数据将是

  

DEC20,或2-5

像这样,

但csv(excel)中的输出显示为

  

20年12月20日和5月5日

而不是原来的。

4 个答案:

答案 0 :(得分:8)

问题与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);

答案 1 :(得分:2)

CSV是一种非常简单的格式,允许Excel在文本上应用默认格式。 我建议您不使用CSV编写Excel文件,但Excel API您应该指定格式化单元格的方式。

Excel COM对象允许您编写本机Excel文件。你可以在这里读到它: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ef11a193-54f3-407b-9374-9f5770fd9fd7

答案 2 :(得分:2)

问题不在于CSV输出,

问题在于Excel“为了自己的利益而太聪明”并自动检测数据类型并推断DEC20是“12月20日”,即使它不是!

您可以通过在文本之前添加'来指示Excel的文本列。 作为
"'my Val", "'Dec10", "'54/40/2042", "'22/7/2013", "439.54"

所有这些都将被视为文本,而不是日期/数字或其他任何内容。

干杯

答案 3 :(得分:0)

如果字符串正在折叠,则应以正确的方式操纵字符串以供excel接受。

如果字符串有,则单引号(&#39;&#39;)添加&#34;&#39; ur string&#39;&#34;整体字符串应在="your string with so all special characters and the commas"

之内