说明
本章教程主要说明如何使用Magicodes.IE.Excel进行图片的导入导出。
要点
配置DTO进行Excel图片导出
配置DTO进行Excel图片导入
图片导入导出特性说明
ExportImageFieldAttribute
Height:高度(默认15)
Width:宽度(默认50)
Alt:图片不存在时替换文本
ImportImageFieldAttribute
ImageDirectory: 图片存储路径(默认存储到临时目录)
ImportImageTo:图片导出方式(默认Base64),支持的方式如下所示:
/// <summary>/// 图片导入类型/// </summary>public enum ImportImageTo{/// <summary>/// 导入到临时目录/// </summary>TempFolder,/// <summary>/// 导入为base64格式/// </summary>Base64}
主要步骤
1.安装包Magicodes.IE.Excel
Install-Package Magicodes.IE.Excel
2.使用Magicodes.IE.Excel导出图片到Excel
如下述示例代码所示,我们需要在图片属性上添加ExportImageFieldAttribute特性,使用特性的“Width”属性指定图片宽度,“Height”属性指定图片高度,“Alt”属性指定替换文本,也就是当图片不存在时则会显示此文本:
[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; }}
值得注意的是:
ExportImageFieldAttribute特性是必须的
图片属性类型必须为string类型,支持本地图片和远程图片地址
接下来,我们就可以使用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;elseitem.Img = "https://docs.microsoft.com/en-us/media/microsoft-logo-dark.png";}var result = await exporter.Export(filePath, data);}
如上述代码所示,目前图片导出可以设置为远程图片地址,以及本地图片地址,并且也可以设置为null(null将会被替代文本所代替)。效果如下图:
3.使用Magicodes.IE.Excel导入图片
Magicodes.IE.Excel支持从Excel导入图片,仅需使用特性“ImportImageField”。其支持两种导入方式:
导入到临时目录
导入为Base64
仅需设置ImportImageTo属性。
ImportImageTo枚举
Base64 导入为base64格式
TempFolder 导入到临时目录
值得注意的是,同上文一样,图片属性字段类型也仅支持string类型。
准备待导入的包含图片的Excel
在开始之前,我们需准备好导入的Excel,本示例中的模板如下图所示:
您可以在单元测试的“TestFiles”目录中找到此文件。接下来我们就使用此文件来演示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
将图片导入为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编码的结果:
转载是一种动力 分享是一种美德
作者:hueifeng
如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
文档官网:docs.xin-lai.com
QQ群:
编程交流群<85318032>
产品交流群<897857351>