我使用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中使用相同的方法。
答案 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");