如何配置CsvHelper以始终在其CSV输出中引用特定字段?

问题描述 投票:1回答:2

我正在使用CsvHelper包将C#模型写入Csv。我正在使用流畅的类映射(继承自CsvClassMap)来定义我的字段到属性映射。

我遇到的问题是某些属性值看起来像日期要好。例如“2 - 4”。我希望最终用户使用excel来查看这些CSV。我不希望这些值显示为日期,所以我希望让CsvHelper用引号括起这个字段。但是,我只希望这个字段被引号括起来。还有其他字段包含我想要解释的数据(例如日期)。我可以配置我的映射以指定应该引用此字段吗?我玩过类型转换器,但这显然是错误的方法,因为这是转换VALUE而不是指示如何格式化字段。

c# excel csv fluent csvhelper
2个回答
1
投票

从版本12开始,您可以这样做:

const int indexToQuote = 4;
csv.Configuration.ShouldQuote = (field, context) => 
    context.Record.Count == indexToQuote && 
    context.HasHeaderBeenWritten;

0
投票

所以,显然引用并不是我需要做的。 Excel非常有用地决定将远远看起来像日期的数值视为日期,除非该字段以空格开头(然后它将不会显示)。我觉得依靠这是相当hackish,但我会接受它。 FWIW,这是我使用的类型转换器:

public class LeadingSpaceTypeConverter : DefaultTypeConverter {

    public override string ConvertToString( TypeConverterOptions options, object value ) {
        if (value == null ) {
            return String.Empty;
        }

        return String.Concat(" ", value.ToString());
    }
}

和流利的代码:

Map( m => m.CompanySize ).TypeConverter<LeadingSpaceTypeConverter>().Index( 4 );
© www.soinside.com 2019 - 2024. All rights reserved.