ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出
Magicodes.IE Excel图片导入导出
为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,我们将结合社区的建议和意见来进行迭代,您可以点此链接来提交您的意见和建议:
https://github.com/dotnetcore/Magicodes.IE/issues/46

说明
本章教程主要说明如何使用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;
else
item.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,本示例中的模板如下图所示:
导入到临时目录
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编码的结果:

Reference
https://github.com/dotnetcore/Magicodes.IE
ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出的更多相关文章
- ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
Magicodes.IE Csv导入导出 说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 主要步骤 1.安装包Magicodes.IE.Csv Install-Pack ...
- ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程
基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...
- ASP.NET 开源导入导出库Magicodes.IE 多Sheet导入教程
多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...
- .NET 开源导入导出库 Magicodes.IE 2.5发布
今天我们发布了2.5版本,这当然也离不开大家对Magicodes.IE的支持,今天我也是跟往常一样列举了该版本一些重要的更新内容. 当然也要说一下,在这个版本中我们设计了全新的LOGO Excel导出 ...
- 开源导入导出库Magicodes.IE 导出教程
要点 导出特性 如何导出Excel表头 如何导出数据.如何进行数据的切割.如何使用筛选器 导出特性 ExporterAttribute Name: 名称(当前Sheet 名称) HeaderFontS ...
- 开源导入导出库Magicodes.IE 多sheet导入教程
原文作者:tanyongzheng 多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导 ...
- .NET Core开源导入导出库 Magicodes.IE 2.3发布
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- 利用workbench将excel数据导入到MySQL中
数据导入的方式(csv,txt之类) 在MySQL中,数据导入的方式有两种方式 通过第三方客户端导入(workbench) 通过mysql client 方式导入 通过mysql clinet的导入方 ...
- 开源导入导出通用库Magicodes.ExporterAndImporter发布
导入导出通用库 Magicodes.ExporterAndImporter为心莱团队封装的导入导出通用库,并且仍在跟随项目不断地打磨. GitHub地址: https://github.com/xin ...
随机推荐
- @Value默认值填null
@Value("${topology.position.spout.maxpending:#{null}}") private Integer spoutMaxPending; @ ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-模拟接口响应数据(18)
这里是把传入的请求数据作为响应值返回 # -*- coding: utf-8 -*- # @Time : 2020/2/15 9:47 # @File : do_mock_18.py # @Autho ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
- keepalive笔记之三:keepalived通知脚本进阶示例
下面的脚本可以接受选项,其中: -s, --service SERVICE,...:指定服务脚本名称,当状态切换时可自动启动.重启或关闭此服务: -a, --address VIP: 指定相关虚拟路由 ...
- unittest(20)- 自动更新表格中数据(5)
# 1. get_data.py from tools import project_path import pandas as pd class GetData: Cookie = None Add ...
- 从 ListView 到 RecyclerView 的用法浅析
文章目录 要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路. ListView,一种在垂直滚动列表中显示条目的视图:RecyclerView,一种在局限的窗口呈现大数据集合的灵活视图.Rec ...
- SurfaceView和TextureView的区别
SurfaceView和TextureView均继承于android.view.View,与其它View不同的是,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能.Surfac ...
- Mybatis调用存储过程报错
Mybatis调用存储过程 贴码 123456 Error querying database. Cause: java.sql.SQLException: User does not have ac ...
- python中使用paramiko模块并实现远程连接服务器执行上传下载
paramiko模块 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系 ...
- [置顶]
利用Python 提醒实验室同学值日(自动发送邮件)
前言: 在实验室里一直存在着一个问题,就是老是有人忘记提醒下一个人值日,然后值日就被迫中断了.毕竟良好的 卫生环境需要大家一起来维护的!没办法只能想出一些小对策了. 解决思路: 首先,我 ...