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

C# 如何将CsvHelper配置为始终在其CSV输出中引用特定字段?,c#,excel,csv,fluent,csvhelper,C#,Excel,Csv,Fluent,Csvhelper,我正在使用该软件包将我的C#模型写入Csv。我正在使用fluent类映射(继承自CsvClassMap)来定义字段到属性的映射 我遇到的问题是,有些属性值看起来像excel中的日期。例如“2-4”。我希望最终用户使用excel查看这些CSV。我不希望这些值显示为日期,所以我希望CsvHelper用引号将此字段括起来。但是,我只希望这个字段用引号括起来。还有其他字段包含我想要解释的数据(例如日期)。我是否可以配置映射以指定应引用此字段?我曾经尝试过使用类型转换器,但这显然是错误的方法,因为这是转换

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


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

因此,显然引用不是我需要做的。Excel非常有帮助地决定将看起来像日期的数值视为日期,除非该字段以空格开头(这样它就不会显示)。我觉得依靠这一点有点不妥,但我接受了。FWIW,这是我使用的类型转换器:

public class LeadingSpaceTypeConverter : DefaultTypeConverter {

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

        return String.Concat(" ", value.ToString());
    }
}
和fluent代码:

Map( m => m.CompanySize ).TypeConverter<LeadingSpaceTypeConverter>().Index( 4 );
Map(m=>m.CompanySize).TypeConverter().Index(4);

从第12版开始,您可以执行以下操作:

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

我接受了,因为这是一个更好的最终结果,但仍然不是很好。理想情况下,任何解决方案都是声明性的,而不是强制性的。太老了,我现在无法投资解决;-)同意,这是一个平庸的解决方案。感谢您的接受,很高兴您不是拍摄信使的类型:)