为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,咱们将结合社区的建议和意见来进行迭代,您能够点此连接来提交您的意见和建议:
https://github.com/dotnetcore/Magicodes.IE/issues/46git
本章教程主要说明如何使用Magicodes.IE.Excel进行图片的导入导出。github
/// <summary> /// 图片导入类型 /// </summary> public enum ImportImageTo { /// <summary> /// 导入到临时目录 /// </summary> TempFolder, /// <summary> /// 导入为base64格式 /// </summary> Base64 }
Install-Package Magicodes.IE.Excel
以下述示例代码所示,咱们须要在图片属性上添加ExportImageFieldAttribute特性,使用特性的“Width”属性指定图片宽度,“Height”属性指定图片高度,“Alt”属性指定替换文本,也就是当图片不存在时则会显示此文本:shell
[ExcelExporter(Name = "测试")] public class ExportTestDataWithPicture { [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; } [ExportImageField(Width = 20, Height = 120)] [ExporterHeader(DisplayName = "图1")] public string Img1 { get; set; } [ExporterHeader(DisplayName = "数值", Format = "#,##0")] public decimal Number { get; set; } [ExporterHeader(DisplayName = "名称", IsAutoFit = true)] public string Name { get; set; } /// <summary> /// 时间测试 /// </summary> [ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")] public DateTime Time1 { get; set; } [ExportImageField(Width = 50, Height = 120, Alt = "404")] [ExporterHeader(DisplayName = "图", IsAutoFit = false)] public string Img { get; set; } }
值得注意的是:async
接下来,咱们就能够使用API来执行导出了。其实除了Dto的不一样,导出API仍是一个,以下述代码所示:测试
public async Task ExportPicture_Test() { IExporter exporter = new ExcelExporter(); var url = Path.Combine("TestFiles", "ExporterTest.png"); for (var i = 0; i < data.Count; i++) { var item = data[i]; item.Img1 = url; if (i == 4) item.Img = null; else item.Img = "https://docs.microsoft.com/en-us/media/microsoft-logo-dark.png"; } var result = await exporter.Export(filePath, data); }
如上述代码所示,目前图片导出能够设置为远程图片地址,以及本地图片地址,而且也能够设置为null(null将会被替代文本所代替)。效果以下图:网站
Magicodes.IE.Excel支持从Excel导入图片,仅需使用特性“ImportImageField”。其支持两种导入方式:编码
仅需设置ImportImageTo属性。url
ImportImageTo枚举excel
Base64 导入为base64格式code
TempFolder 导入到临时目录
值得注意的是,同上文同样,图片属性字段类型也仅支持string类型。
在开始以前,咱们需准备好导入的Excel,本示例中的模板以下图所示:
Dto模型以下所示:
public class ImportPictureDto { [ImporterHeader(Name = "加粗文本")] public string Text { get; set; } [ImporterHeader(Name = "普通文本")] public string Text2 { get; set; } /// <summary> /// 将图片写入到临时目录 /// </summary> [ImportImageField(ImportImageTo = ImportImageTo.TempFolder)] [ImporterHeader(Name = "图1")] public string Img1 { get; set; } [ImporterHeader(Name = "数值")] public string Number { get; set; } [ImporterHeader(Name = "名称")] public string Name { get; set; } [ImporterHeader(Name = "日期")] public DateTime Time { get; set; } /// <summary> /// 将图片写入到临时目录 /// </summary> [ImportImageField(ImportImageTo = ImportImageTo.TempFolder)] [ImporterHeader(Name = "图")] public string Img { get; set; } }
导入仍是那个导入,只是Dto设置变了:
public async Task ImportPicture_Test() { var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "图片导入模板.xlsx"); var import = await Importer.Import<ImportPictureDto>(filePath); if (import.Exception != null) _testOutputHelper.WriteLine(import.Exception.ToString()); if (import.RowErrors.Count > 0) _testOutputHelper.WriteLine(JsonConvert.SerializeObject(import.RowErrors)); }
以下图所示,Excel中的图片就会导入到临时目录。值得注意的是:
将图片导入为base64仅需设置“ImportImageTo”属性值为“ImportImageTo.Base64”便可:
public class ImportPictureBase64Dto { [ImporterHeader(Name = "加粗文本")] public string Text { get; set; } [ImporterHeader(Name = "普通文本")] public string Text2 { get; set; } /// <summary> /// 将图片导入为base64(默认为base64) /// </summary> [ImportImageField(ImportImageTo = ImportImageTo.Base64)] [ImporterHeader(Name = "图1")] public string Img1 { get; set; } [ImporterHeader(Name = "数值")] public string Number { get; set; } [ImporterHeader(Name = "名称")] public string Name { get; set; } [ImporterHeader(Name = "日期")] public DateTime Time { get; set; } /// <summary> /// 将图片导入到临时目录 /// </summary> [ImportImageField(ImportImageTo = ImportImageTo.TempFolder)] [ImporterHeader(Name = "图")] public string Img { get; set; } }
导入代码同上:
public async Task ImportPictureBase64_Test() { var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "图片导入模板.xlsx"); var import = await Importer.Import<ImportPictureBase64Dto>(filePath); }
以下图所示,咱们就很方便的获得了图片的base64编码的结果: