Magicodes.IE是我们维护的开源的导入导出通用库,去年年底已加入NCC开源组织。
Github地址:https://github.com/xin-lai/Magicodes.IE
Magicodes.IE不是一蹴而就,而是根据实际需求不断迭代出来的,而且历经多次重构。这一次,趁着春节假期,我们重构并发布了Magicodes.IE 2.0。在这里尤其要感谢一位小伙伴,@hueifeng https://github.com/hueifeng,感谢其在春节期间为Magicodes.IE做出的文档贡献。
由于个人和团队精力有限,Magicodes.IE非常迫切地希望能得到大家的帮助和支持,尤其是代码和文档贡献。如有意向,可以提交PR或者和我直接联系(公众号或QQ群均可)。
名称
Nuget
Magicodes.IE.Core
NuGet
Magicodes.IE.Excel
NuGet
Magicodes.IE.Pdf
NuGet
Magicodes.IE.Word
NuGet
Magicodes.IE.Html
NuGet
Magicodes.IE 2.0主要更新如下所示:
完全重构整个导出Excel模块并且重写大部分接口
支持列头筛选器——IExporterHeaderFilter,以便动态更改Excel导出结果
public class TestExporterHeaderFilter1 : IExporterHeaderFilter
{
///
///
///
public ExporterHeaderInfo Filter(ExporterHeaderInfo exporterHeaderInfo)
{
if (exporterHeaderInfo.DisplayName.Equals("名称"))
{
exporterHeaderInfo.DisplayName = "name";
}
return exporterHeaderInfo;
}
}
支持导入结果筛选器——IImportResultFilter,可用于多语言场景的错误标注
public class ImportResultFilterTest : IImportResultFilter
{
///
///
///
///
public ImportResult
{
var errorRows = new List
{
,
};
var items = importResult.RowErrors.Where(p => errorRows.Contains(p.RowIndex)).ToList();
for (int i = ; i < items.Count; i++)
{
for (int j = ; j < items\[i\].FieldErrors.Keys.Count; j++)
{
var key = items\[i\].FieldErrors.Keys.ElementAt(j);
var value = items\[i\].FieldErrors\[key\];
items\[i\].FieldErrors\[key\] = value?.Replace("存在数据重复,请检查!所在行:", "Duplicate data exists, please check! Where:");
}
}
return importResult;
}
}
支持列筛选器(需实现接口【IImportHeaderFilter】),可用于兼容多语言导入等场景
///
public class ImportHeaderFilterTest : IImportHeaderFilter
{
public List
{
foreach (var item in importerHeaderInfos)
{
if (item.PropertyName == "Name")
{
item.Header.Name = "Student";
}
else if (item.PropertyName == "Gender")
{
item.MappingValues = new Dictionary
{
{"男", },
{"女", }
};
}
}
return importerHeaderInfos;
}
}
导出Excel支持拆分Sheet,仅需设置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,为0则不拆分
[ExcelExporter(Name = "测试", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = )]
public class ExportTestDataWithSplitSheet
Excel模板导出优化
优化导出性能
修复数据项为NULL的异常
修复多个Table渲染以及合并单元格渲染的问题
IExporter再添加两个动态DataTable导出方法,无需定义Dto即可动态导出数据,并且支持表头筛选器、Sheet拆分
///
/// 文件名称
/// 数据
/// 表头筛选器
/// 一个Sheet最大允许的行数,设置了之后将输出多个Sheet
///
Task
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="dataItems">数据</param>
/// <param name="exporterHeaderFilter">表头筛选器</param>
/// <param name="maxRowNumberOnASheet">一个Sheet最大允许的行数,设置了之后将输出多个Sheet</param>
/// <returns>文件二进制数组</returns>
Task<byte\[\]> ExportAsByteArray(DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = );
支持传入标注文件路径,不传参则默认同目录”_”后缀保存
修复日期格式默认导出数字的Bug,默认输出“yyyy-MM-dd”,可以通过设置“[ExporterHeader(DisplayName = “日期2”, Format = “yyyy-MM-dd HH:mm:ss”)]”来修改。
修复没有定义导出特性会报错的情形。
修复转换DataTable时支持为空类型
修复导出结果无法筛选的问题
完善相关单元测试
完善部分文档并完成:
2.1规划如下,由于精力有限,具体时间待定:
由于个人和团队精力有限,Magicodes.IE非常迫切地希望能得到大家的帮助和支持,尤其是代码和文档贡献。如有意向,可以提交PR或者和我直接联系(公众号或QQ群均可)。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章