1

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

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

4

2 回答 2

1

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

const int indexToQuote = 4;
csv.Configuration.ShouldQuote = (field, context) => 
    context.Record.Count == indexToQuote && 
    context.HasHeaderBeenWritten;
于 2019-03-04T17:26:02.357 回答
0

所以,显然引用不是我需要做的。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());
    }
}

和流畅的代码:

Map( m => m.CompanySize ).TypeConverter<LeadingSpaceTypeConverter>().Index( 4 );
于 2015-09-22T21:07:55.423 回答