编写CSV文件时,只需引用特定列。使用CsvHelper 6.1.0,有没有办法单独配置字段,特别是它们是否被引用?
字段1,字段2,字段3,字段4,字段5,字段6 “引用”, “引用”,NotQuoted,NotQuoted,NotQuoted, “援引” “引”, “引用”,NotQuoted,NotQuoted,NotQuoted, “引用”
到目前为止,我只在配置对象中找到了QuoteAllFields和QuoteNoFields。
答案 0 :(得分:2)
您可以使用Class Mapping执行此操作。
您可以从自动化课程开始,然后编辑要在引号中显示的字段。像这样:
public sealed class MyClassMap : ClassMap<MyClass> {
public MyClassMap() {
AutoMap();
Map(m => m.Field1).ConvertUsing(m => $"\"{m.Field1}\"");
Map(m => m.Field2).ConvertUsing(m => $"\"{m.Field2}\"");
Map(m => m.Field6).ConvertUsing(m => $"\"{m.Field6}\"");
}
}
然后在编写文件时应用它:
CsvWriter myWriter = new CsvWriter(stream);
myWriter.Configuration.RegisterClassMap<MyClassMap>();
我不完全确定这是否是“正确”的方式,但它似乎最简单。你可以实现一个放入引号的TypeConverter
,但这似乎太简单了......
答案 1 :(得分:0)
我知道OP问了有关6.1.0的问题,但是如果它对其他人有帮助,那么从版本12开始,会有更好的解决方案:
var indexesToQuote = new[] { 0, 2 };
csv.Configuration.ShouldQuote = (field, context) =>
indexesToQuote.Contains(context.Record.Count) &&
context.HasHeaderBeenWritten;