我正在使用CsvHelper包将C#模型写入Csv。我正在使用流畅的类映射(继承自CsvClassMap)来定义我的字段到属性映射。
我遇到的问题是某些属性值看起来像日期要好。例如“2 - 4”。我希望最终用户使用excel来查看这些CSV。我不希望这些值显示为日期,所以我希望让CsvHelper用引号括起这个字段。但是,我只希望这个字段被引号括起来。还有其他字段包含我想要解释的数据(例如日期)。我可以配置我的映射以指定应该引用此字段吗?我玩过类型转换器,但这显然是错误的方法,因为这是转换VALUE而不是指示如何格式化字段。
从版本12开始,您可以这样做:
const int indexToQuote = 4;
csv.Configuration.ShouldQuote = (field, context) =>
context.Record.Count == indexToQuote &&
context.HasHeaderBeenWritten;
所以,显然引用并不是我需要做的。 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 );