-
-
Notifications
You must be signed in to change notification settings - Fork 484
5.动态导出
wenqiang.li edited this page Oct 15, 2020
·
1 revision
通过如下代码片段我们可以实现对Excel表头的导出,我们可以以数组的形式进行传递生成我们的动态表头,同时以exporter.ExportHeaderAsByteArray
的调用并将我们byte[]
类型的result
导出到指定的filepath(路径)中。
public async Task ExportHeaderAsByteArrayWithItems_Test()
{
IExcelExporter exporter = new ExcelExporter();
var arr = new[] { "Name1", "Name2", "Name3", "Name4", "Name5", "Name6" };
var sheetName = "Test";
var result = await exporter.ExportHeaderAsByteArray(arr, sheetName);
result.ToExcelExportFileInfo(filePath);
}
动态类型导出我们可以通过DataTable方式进行导出,在该导出中exportDatas
是一个List,不过在如下代码片段中我们已经将其转换为DataTable类型并进行导出,maxRowNumberOnASheet
为每一个sheet容纳的行数。
public async Task LargeDataDynamicExport_Test()
{
IExcelExporter exporter = new ExcelExporter();
var dt = new DataTable();
//创建带列名和类型名的列
dt.Columns.Add("Text", Type.GetType("System.String"));
dt.Columns.Add("Name", Type.GetType("System.String"));
dt.Columns.Add("Number", Type.GetType("System.Decimal"));
dt = EntityToDataTable(dt, exportDatas);
var result = await exporter.Export(filePath, dt, maxRowNumberOnASheet: 100000);
}
ExpandoObject
它是一个动态对象,他是动态语言(DLR)的一部分,通过ExpandoObject
我们可以在运行时添加和删除其实例的成员,当然还可以设置和获取这些值。在IE中我们是支持ExpandoObject
对象的,所以在此处我们可以通过ExpandoObject
来实现我们动态的导出行为。
public async Task ExportAsByteArraySupportDynamicType_Test()
{
IExporter exporter = new ExcelExporter();
var source = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>();
string fields = "text,number,name";
var shapedData = source.ShapeData(fields) as ICollection<ExpandoObject>;
var result = await exporter.ExportAsByteArray<ExpandoObject>(shapedData);
File.WriteAllBytes(filePath, result);
}
另外对于ExpandoObject导出过程中对于表头等信息,可以使用筛选器进行实现,详细请参考筛选器使用的教程文章。