ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出
- 作者: 张伟123666
- 来源: 51数据库
- 2021-07-28
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
