使用FileHelpers动态创建CSV文件

时间:2010-01-21 21:08:28

标签: csv filehelpers

FileHelpers支持名为“RunTime Records”的功能,当您在运行时之前不知道布局时,可以将CSV文件读入DataTable。

是否可以使用FileHelpers以相同的方式在运行时创建CSV文件?

根据某些用户输入,必须创建的CSV文件将具有只能在运行时才能知道的不同字段。我可以按照阅读部分的描述为FileHelper引擎创建所需的Type,但我无法弄清楚我的数据需要写入的格式。

var engine = new FileHelpers.FileHelperEngine(GenerateCsvType());

engine.WriteStream(context.Response.Output, dontKnow);

修改

或者,任何人都可以建议一个好的CSV库,可以创建一个CSV文件而不知道它的字段,直到运行时?例如,从DataTable创建CSV文件。

2 个答案:

答案 0 :(得分:6)

实际上,库现在只允许读取运行时记录,但是对于编写purpouse,您可以使用DataTableToCsv方法,如下所示:

CsvEngine.DataTableToCsv(dt, filename);

如果有帮助,请告诉我。

答案 1 :(得分:1)

我知道这是一个老问题,但我自己遇到了同样的问题并花了一些时间寻找解决方案,所以我决定分享我的发现。

如果您使用FileHelpers RunTime Records创建定义,则可以使用反射填充相同的定义。

例如,如果您创建了一个定义

        DelimitedClassBuilder cb = new DelimitedClassBuilder("Customers", ",");
        cb.AddField("StringField", "string");

        Type t = cb.CreateRecordClass();
        FileHelperEngine engine = new FileHelperEngine(t); 

现在,您可以使用FileHelpers创建的相同类型来填充值,如下所示:

        object customClass = Activator.CreateInstance(t);
        System.Reflection.FieldInfo field = customClass.GetType().GetField("StringField", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
        if (field != null)
        {
            field.SetValue(customClass, "StringValue");
        }

然后将其写入文件或字符串:

        string line = engine.WriteString(new object[] { customClass });