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

How do I configure CsvHelper to always quote a specific field in its CSV output?

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

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

所以,显然引用不是我需要做的。 Excel 非常有帮助地决定将看起来像日期的数值视为日期,除非该字段以 space 开头(然后它将不会显示)。我觉得依赖这个是相当骇人听闻的,但我会接受它。 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 );

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

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