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

C#-写入CSV文件时的格式列(单元格格式),c#,.net,string,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),

已经编写了将数据导出到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);
for(int i=0;i
请帮助我获得使用C#在excel(csv)文件中显示的确切
字符串
格式

例: myData[i]。名称数据将被删除

12月20日,或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);
for(int i=0;i
CSV是一种非常简单的格式,允许Excel在文本上应用默认格式。 我建议您编写Excel文件时不要使用CSV,但Excel API应该指定单元格的格式

Excel COM对象将允许您编写本机Excel文件。您可以在此处阅读:

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


如果字符串有,单引号(“”)加上“'ur string'”,整个字符串应该在
=”字符串中,因此所有特殊字符和逗号“

问题不在于CSV输出

问题是Excel“太聪明了,不利于自身”,它会自动检测数据类型并推断DEC20是“12月20日”,即使它不是

您可以通过在文本前添加一个'来指示Excel对文本列进行编辑。 as
“'my Val'、'Dec10'、'54/40/2042'、'22/7/2013'、'439.54”

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


干杯

myData[i]的类型是什么。说明?FormatExportString()的作用是什么?这只是一种替换单元格值的方法。一个完整的示例可以帮助您显示myData[i]+结果sb+结果文件内容是什么?您确定问题出在您的导出器上吗?加载(正确格式的)CSV文件时,Excel不会更改格式吗?在记事本中打开CSV文件并检查。是的,我认为Carson63000是正确的,尝试用记事本打开CSV尝试在文本前添加“=”,我编辑了答案以更好地解释为什么会这样<代码>实际值=字段1;returnValue=“=\”+字段1+“\”否,不需要添加“actualValue”;在打印字段之前,你可以简单地在引号之间加上一个“=”,例如:=“field1”,“field2”,“DEC20”,ecc…在C#code中,实际上我不能像这样直接添加,所以在format方法中包含了,但是字符串在某个地方被折叠了。我以为你是在说csv文件,我已经用一些代码编辑了答案,你可以试试。好的,但是它也适用于像汉字这样的特殊字符吗?请参考这一部分。但是如果机器上没有Excel怎么办?可以用记事本打开。。如果记事本可以用管道分隔,就像用管道分隔的字符一样出现,但所面临的问题是,数据应该是准确的,并且应该在不改变的情况下显示,这样,就像被认为是字符串一样。。你的回答也很有帮助。。但上述想法是另一个好主意,适用于动态情况。。谢谢大家……)虽然在CSV中会出现“char”,但excel不会显示它。。。但是,是的,=“fdgd”也是一个很好的解决方案:)