如何创buildCSV,以便数字在电子表格中显示为string?

我试图build立一个应用程序,从数据库中提取一些数据,然后使用一些数据来创build一个CSV文件,由Excel加载。 代码:

foreach (xOFDocInfo cm in docs) { string s = bi.Agency + "," + cm.BatNbr.Trim() + "," + cm.RefNbr + "," + cm.DocType + "," + cm.OrigDocAmt.ToString() + "," + cm.CreateDate.ToShortDateString(); writer.WriteLine(s); } 

“cm.BatNbr”是一个6个字符的零填充数字,如“001234”。 我希望Excel将文本格式设置为文本格式,所以我不会在前面丢失零。 我已经尝试了一些技巧,例如用单引号(撇号)加数字,但我得到的只是一个撇号前缀。 如果我将单元格设置为文本格式,然后删除撇号,我也失去了前面的零。

我不小心发现,如果我用百分号前缀的东西,Excel将单元格中的值转换为一个百分比,所以也许有一些前缀我可以用来导致Excel将单元格中的值作为文本加载时向上?

您可以将数据格式化为="001234" 。 这将导致Excel将其显示为001234。

 foreach (xOFDocInfo cm in docs) { string s = bi.Agency + ",=\"" + cm.BatNbr.Trim() + "\"," + cm.RefNbr + "," + cm.DocType + "," + cm.OrigDocAmt.ToString() + "," + cm.CreateDate.ToShortDateString(); writer.WriteLine(s); } 

您也可以尝试使用SYLK格式而不是CSV。 SYLK让您更好地控制格式。

尝试引用BatNbr

 foreach (xOFDocInfo cm in docs) { string s = bi.Agency + ", \"" + cm.BatNbr.Trim() + "\"" + "," + cm.RefNbr + "," + cm.DocType + "," + cm.OrigDocAmt.ToString() + "," + cm.CreateDate.ToShortDateString(); writer.WriteLine(s); } 

用引号括住每个值应该可以解决你的问题(编辑:我发现现在不行,但是我会留下这个答案,因为其余的信息可能仍然有用)。

从技术上讲,无法指定CSV中的types,这适用于CSV创build者和CSV阅读器。 某些程序尝试从CSV中推断数据types,但这不是一种好的做法,并且不受CSV的任何支持。

你可以用引号包围每个值,实际上我会推荐它,即使它是可选的。

同样重要的是,如果围绕一个带引号的值,确保在逗号和开始引号之间没有前导空格。 这会弄乱Microsoft Excel,它会呈现单元格为空白。

在将CSV导入到Excel中时,可以解决此问题。 在导入并设置CSV文件parsing时,您可以select分配数字格式。 我一直在营销名单中使用这个邮政编码列,以防止在新英格兰邮政编码丢失前导零。

此外,正如Richard指出的那样,您可以在数字之前添加关键字,然后使用Excel中的“文本到列”functionparsing列。

这对我工作:

改行:

  + "," + cm.BatNbr.Trim() 

对于:

  + ",\t" + cm.BatNbr.Trim()