LinqToCSV格式列为文本

时间:2015-11-06 13:58:47

标签: c# linqtocsv

我正在使用LinqToCSV将List输出到CSV。示例代码片段如下:

class Person
{
    [CsvColumn(Name = "Name", FieldIndex = 1)]
    public string UserName { get; set; }
    [CsvColumn(Name = "Address 1", FieldIndex = 2)]
    public string Address1 { get; set; }
    [CsvColumn(Name = "Telephone", FieldIndex = 3)]
    public string Telephone { get; set; }
}


private void OutputToCSV(string filenamePrefix, List<Person> people)
{
    CsvFileDescription outputFileDescription = new CsvFileDescription
    {
        SeparatorChar = ','
        FirstLineHasColumnNames = true, 
        FileCultureName = "en-GB"
    };

    CsvContext cc = new CsvContext();
    cc.Write(
        people,
        @"C:\temp\people.csv",
        outputFileDescription);            
}

我遇到的问题是电话号码。如果它在对象中为0123456789012,那么当我在Excel中打开CSV时,它被视为一个数字,并且前导零被删除。我想预先将CSV中的列格式化为文本。

根据Stop Excel from automatically converting certain text values to dates我可以用等号开始字段并将值放在引号中,但是我可以设置一个属性,这意味着LinqToCSV会为我做这个吗?我真的不想使用LinqToCSV,然后打开文件并编辑它以获得我想要的。

3 个答案:

答案 0 :(得分:1)

您是否打算创建CSV或Excel文件?如果是后者,那么如果你使用Nuget的Epplus会更容易吗?即:

cat $(find -regex '.*\.cd?$') | wc -l

答案 1 :(得分:0)

尝试使用OutputFormat强制它ToString()。您也可以将它与其他修复程序结合使用,并使用OutputFormat =&#34; = C&#34;但我没试过。

[CsvColumn(Name = "Telephone", FieldIndex = 3, OutputFormat = "C")]
public string Telephone { get; set; }

答案 2 :(得分:-1)

正如您所说,这是一个Excel问题,您需要将数据设置为前导符号,以便0123456789012变为=&#34; 0123456789012&#34;。

您可以使用OutputFormat更改格式,但您需要使用格式:

[CsvColumn(FieldIndex = 2, OutputFormat = "dd MMM HH:mm:ss")]