使用FileHelperEngine从动态表生成CSV

时间:2018-03-01 06:59:16

标签: c# export-to-csv filehelpers

我使用FileHelperEngine将表格导出为CSV 这里的问题是 FileHelper需要[DelimitedRecord(",")]班级列表<>已导出的列。

在我的表中,我有一个Pivot会给我表格列。 因此,CSV中的列将根据数据透视表找到的值进行更改。

在文件助手引擎中,我们必须传递list<t>个分隔的列名称

[DelimitedRecord(",")]
[IgnoreEmptyLines()]
[IgnoreFirst()]
public class MyProduct
{
    //Name
    public string Name{ get; set; }
    //Description, this attribute will handle the double quotes issue
    [FieldQuoted('"', QuoteMode.OptionalForBoth)]
    public string Description{ get; set; }

}

在我的情况下,这些列会更改,所以我尝试了表行类型的列表

var engine = new FileHelperEngine<Dataset.TableRow>();

然后它给了我一个错误

  

记录类Object必须用[DelimitedRecord]或[FixedLengthRecord]属性

标记

我还尝试了一些google后找到的system.io方法

StringBuilder sb = new StringBuilder();

var columnNames = RiskDetailDataWithoutShowDetails.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray();
sb.AppendLine(string.Join(",", columnNames));

foreach (DataRow row in DataTable.Rows)
{
    var fields = row.ItemArray.Select(field => field.ToString()).ToArray();
    sb.AppendLine(string.Join(",", fields));
}
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=" + "Filename.csv"); 
Response.BufferOutput = true;
Response.BufferOutput = true;
Response.Write(sb.ToString());
Response.Flush();
Response.End();

但是这会给我带来数据中分离值的问题。

有没有办法将动态表传递给FileHelperEngine?

我看到有一个List<dynamic> list。但是没有任何方法在helperEngine中使用相同的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用class builder

DelimitedClassBuilder cb = new DelimitedClassBuilder("MyProduct", delimiter: ",");

cb.AddField("Name", typeof(string));
cb.LastField.TrimMode = TrimMode.Both;

cb.AddField("Description", typeof(string));
cb.LastField.FieldQuoted = true;
cb.LastField.QuoteChar = '"';
cb.LastField.QuoteMode = QuoteMode.OptionalForBoth;

// etc... e.g., add a date field
cb.AddField("SomeDate", typeof(DateTime));

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

DataTable dt = engine.ReadFileAsDT("test.txt");