Magicodes.IE已⽀持导出Word、Pdf和Html
关于Magicodes.IE
导⼊导出通⽤库,通过导⼊导出DTO模型来控制导⼊和导出,⽀持Excel、Word、Pdf和Html。
特点
需配合相关导⼊导出的DTO模型使⽤,⽀持通过DTO以及相关特性控制导⼊导出。配置特性即可控制相关逻辑和显⽰结果,⽆需修改逻辑代码;
导出⽀持列头⾃定义处理以便⽀持多语⾔等场景;
导出⽀持⽂本⾃定义过滤或处理;
导⼊⽀持中间空⾏⾃动跳过;
导⼊⽀持⾃动根据 DTO ⽣成导⼊模板,针对必填项将⾃动标注;
导⼊⽀持数据下拉选择,⽬前仅⽀持枚举类型;
导⼊数据⽀持前后空格以及中间空格处理,允许指定列进⾏设置
导⼊⽀持模板⾃动检查,数据⾃动校验,异常统⼀处理,并提供统⼀的错误封装,包含异常、模板错误和⾏数据错误;
⽀持导⼊表头位置设置,默认为1;
⽀持导⼊列乱序,⽆需按顺序⼀⼀对应;
⽀持导⼊指定列索引,默认⾃动识别;
⽀持将导⼊Excel进⾏错误标注;
导⼊⽀持截⽌列设置,如未设置则默认遇到空格截⽌;
⽀持导出HTML、Word、Pdf,⽀持⾃定义导出模板;
导出HTML
导出Word
导出Pdf
导出收据
导⼊⽀持重复验证;
⽀持单个数据模板导出,常⽤于导出收据、凭据等业务
⽀持动态列导出(基于DataTable),感谢张善友(
相关官⽅Nuget包
关注“麦扣聊技术”可以获得最新⽂章、教程、⽂档:
QQ
编程交流<85318032>
产品交流<897857351>
⽂档官⽹&官⽅博客
⽂档官⽹:
博客:
其他开源库
VNext
⽣成导⼊模板时必填项⽀持⾃定义样式配置
CSV⽀持
导⼊结果⽀持⽣成HTML输出
更新历史
2019.10.30
【Nuget】版本更新到1.4.0
【导出】Excel导出⽀持动态列导出(基于DataTable),感谢张善友(
2019.10.22
【Nuget】版本更新到1.3.7
【导⼊】修复忽略列的验证问题
【导⼊】修正验证错误信息,⼀⾏仅允许存在⼀条数据
【导⼊】修复忽略列在某些情况下可能引发的异常
【导⼊】添加存在忽略列的导⼊情形下的单元测试
2019.10.21
【Nuget】版本更新到1.3.4
【导⼊】⽀持设置忽略列,以便于在Dto定义数据列做处理或映射
2019.10.18
【优化】优化.NET标准库2.1下集合转DataTable的性能
【重构】多处IList修改为ICollection
【完善】补充部分单元测试
2019.10.12
【重构】重构HTML、PDF导出等逻辑,并修改IExporterByTemplate为:
Task ExportListByTemplate(IList dataItems, string htmlTemplate = null) where T : class;
pdf转html
Task ExportByTemplate(T data, string htmlTemplate = null) where T : class;
【⽰例】添加收据导出的单元测试⽰例
2019.9.28
【导出】修改默认的导出HTML、Word、Pdf模板
【导⼊】添加截断⾏的单元测试,以测试中间空格和结尾空格
【导⼊】将【数据错误检测】和【导⼊】单元测试的Dto分开,确保全部单元测试通过
【⽂档】更新⽂档
2019.9.26
【导出】⽀持导出Word、Pdf、HTML,⽀持⾃定义导出模板
【导出】添加相关导出的单元测试
【导⼊】⽀持重复验证,需设置ImporterHeader特性的IsAllowRepeat为false
2019.9.19
【导⼊】⽀持截⽌列设置,如未设置则默认遇到空格截⽌
【导⼊】导⼊⽀持通过特性设置Sheet名称
2019.9.18
【导⼊】重构导⼊模块
【导⼊】统⼀导⼊错误消息
Exception :导⼊异常信息
RowErrors :数据错误信息
TemplateErrors :模板错误信息,⽀持错误分级
HasError : 是否存在错误(仅当出现异常并且错误等级为Error时返回true)
【导⼊】基础类型必填⾃动识别,⽐如int、double等不可为空类型⾃动识别,⽆需额外设置Required 【导⼊】修改Excel模板的Sheet名称
【导⼊】⽀持导⼊表头位置设置,默认为1
【导⼊】⽀持列乱序(导⼊模板的列序号不再需要固定)
【导⼊】⽀持列索引设置
【导⼊】⽀持将导⼊的Excel进⾏错误标注,⽀持多个错误
【导⼊】加强对基础类型和可为空类型的⽀持
【EPPlus】由于EPPlus.Core已经不维护,将EPPlus的包从EPPlus.Core改为EPPlus,2019.9.11
【导⼊】导⼊⽀持⾃动去除前后空格,默认启⽤,可以针对列进⾏关闭,具体见AutoTrim设置【导⼊】导⼊Dto的字段允许不设置ImporterHeader,⽀持通过DisplayAttribute特性获取列名【导⼊】导⼊的Excel移除对Sheet名称的约束,默认获取第⼀个Sheet
【导⼊】导⼊增加对中间空格的处理⽀持,需设置FixAllSpace
【导⼊】导⼊完善对⽇期类型的⽀持
【导⼊】完善导⼊的单元测试
导出 Demo
Demo1-1
普通导出
public class ExportTestData
{
public string Name1 { get; set; }
public string Name2 { get; set; }
public string Name3 { get; set; }
public string Name4 { get; set; }
}
var result = await Exporter.Export(filePath, new List<ExportTestData>()
{
new ExportTestData()
{
Name1 = "1",
Name2 = "test",
Name3 = "12",
Name4 = "11",
},
new ExportTestData()
{
Name1 = "1",
Name2 = "test",
Name3 = "12",
Name4 = "11",
}
});
Demo1-2
特性导出
[ExcelExporter(Name = "测试", TableStyle = "Light10")]
public class ExportTestDataWithAttrs
{
[ExporterHeader(DisplayName = "加粗⽂本", IsBold = true)]
public string Text { get; set; }
[ExporterHeader(DisplayName = "普通⽂本")]
public string Text2 { get; set; }
[ExporterHeader(DisplayName = "忽略", IsIgnore = true)]
public string Text3 { get; set; }
[ExporterHeader(DisplayName = "数值", Format = "#,##0")]
public double Number { get; set; }
[ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
public string Name { get; set; }
}
var result = await Exporter.Export(filePath, new List<ExportTestDataWithAttrs>()
{
new ExportTestDataWithAttrs()
{
Text = "啊实打实⼤苏打撒",
Name="aa",
Number =5000,
Text2 = "w萨达萨达萨达撒",
Text3 = "sadsad打发打发⼠⼤夫的"
},
new ExportTestDataWithAttrs()
{
Text = "啊实打实⼤苏打撒",
Name="啊实打实⼤苏打撒",
Number =6000,
Text2 = "w萨达萨达萨达撒",
Text3 = "sadsad打发打发⼠⼤夫的"
},
new ExportTestDataWithAttrs()
{
Text = "啊实打实速度⼤苏打撒",
Name="萨达萨达",
Number =6000,
Text2 = "突然他也让他⼈",
Text3 = "sadsad打发打发⼠⼤夫的"
},
});
Demo1-3
列头处理或者多语⾔⽀持
[ExcelExporter(Name = "测试", TableStyle = "Light10")]
public class AttrsLocalizationTestData
{
[ExporterHeader(DisplayName = "加粗⽂本", IsBold = true)]
public string Text { get; set; }
[ExporterHeader(DisplayName = "普通⽂本")]
public string Text2 { get; set; }
[ExporterHeader(DisplayName = "忽略", IsIgnore = true)]
public string Text3 { get; set; }
[ExporterHeader(DisplayName = "数值", Format = "#,##0")]
public double Number { get; set; }
[ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
public string Name { get; set; }
}
ExcelBuilder.Create().WithLocalStringFunc((key) =>
{
if (key.Contains("⽂本"))
{
return"Text";
}
return"未知语⾔";
}).Build();
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "testAttrsLocalization.xlsx");
if (File.Exists(filePath)) File.Delete(filePath);
var result = await Exporter.Export(filePath, new List<AttrsLocalizationTestData>()
{
new AttrsLocalizationTestData()
{
Text = "啊实打实⼤苏打撒",
Name="aa",
Number =5000,
Text2 = "w萨达萨达萨达撒",
Text3 = "sadsad打发打发⼠⼤夫的"
},
new AttrsLocalizationTestData()
{
Text = "啊实打实⼤苏打撒",
Name="啊实打实⼤苏打撒",
Number =6000,
Text2 = "w萨达萨达萨达撒",
Text3 = "sadsad打发打发⼠⼤夫的"
},
new AttrsLocalizationTestData()
{
Text = "啊实打实速度⼤苏打撒",
Name="萨达萨达",
Number =6000,
Text2 = "突然他也让他⼈",
Text3 = "sadsad打发打发⼠⼤夫的"
},
});
导⼊ Demo
导⼊特性(ImporterAttribute):HeaderRowIndex:表头位置
导⼊列头特性(ImporterHeader):Name:表头显⽰名称(不可为空)。
Description:表头添加注释。
Author:注释作者,默认值为“麦扣”。
AutoTrim:⾃动过滤空格,默认启⽤。
FixAllSpace:处理掉所有的空格,包括中间空格。默认false。ColumnIndex:列索引,⼀般不建议设置。
导⼊结果(ImportResult):
Data:IList<T>导⼊的数据集合。
RowErrors:IList数据⾏错误。
HasError:bool是否存在导⼊错误。
Exception:异常信息
TemplateErrors:模板错误信息
Demo2-1 普通模板
⽣成模板
public class ImportProductDto
{
///<summary>
///产品名称
///</summary>
[ImporterHeader(Name = "产品名称")]
public string Name { get; set; }
///<summary>
///产品代码
///</summary>
[ImporterHeader(Name = "产品代码")]
public string Code { get; set; }
///<summary>
///产品条码
///</summary>
[ImporterHeader(Name = "产品条码")]
public string BarCode { get; set; }
}
导⼊模板