Skip to content

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动态导出

动态类型导出我们可以通过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导出

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导出过程中对于表头等信息,可以使用筛选器进行实现,详细请参考筛选器使用的教程文章。