使用CsvHelper

时间:2017-12-24 05:22:51

标签: c# csvhelper

编写CSV文件时,只需引用特定列。使用CsvHelper 6.1.0,有没有办法单独配置字段,特别是它们是否被引用?

  

字段1,字段2,字段3,字段4,字段5,字段6      “引用”, “引用”,NotQuoted,NotQuoted,NotQuoted, “援引”      “引”, “引用”,NotQuoted,NotQuoted,NotQuoted, “引用”

到目前为止,我只在配置对象中找到了QuoteAllFields和QuoteNoFields。

2 个答案:

答案 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;