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图片导入导出的更多相关文章

  1. ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出

    Magicodes.IE Csv导入导出 说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 主要步骤 1.安装包Magicodes.IE.Csv Install-Pack ...

  2. ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程

    基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...

  3. ASP.NET 开源导入导出库Magicodes.IE 多Sheet导入教程

    多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...

  4. .NET 开源导入导出库 Magicodes.IE 2.5发布

    今天我们发布了2.5版本,这当然也离不开大家对Magicodes.IE的支持,今天我也是跟往常一样列举了该版本一些重要的更新内容. 当然也要说一下,在这个版本中我们设计了全新的LOGO Excel导出 ...

  5. 开源导入导出库Magicodes.IE 导出教程

    要点 导出特性 如何导出Excel表头 如何导出数据.如何进行数据的切割.如何使用筛选器 导出特性 ExporterAttribute Name: 名称(当前Sheet 名称) HeaderFontS ...

  6. 开源导入导出库Magicodes.IE 多sheet导入教程

    原文作者:tanyongzheng 多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导 ...

  7. .NET Core开源导入导出库 Magicodes.IE 2.3发布

    在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...

  8. 利用workbench将excel数据导入到MySQL中

    数据导入的方式(csv,txt之类) 在MySQL中,数据导入的方式有两种方式 通过第三方客户端导入(workbench) 通过mysql client 方式导入 通过mysql clinet的导入方 ...

  9. 开源导入导出通用库Magicodes.ExporterAndImporter发布

    导入导出通用库 Magicodes.ExporterAndImporter为心莱团队封装的导入导出通用库,并且仍在跟随项目不断地打磨. GitHub地址: https://github.com/xin ...

随机推荐

  1. @Value默认值填null

    @Value("${topology.position.spout.maxpending:#{null}}") private Integer spoutMaxPending; @ ...

  2. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-模拟接口响应数据(18)

    这里是把传入的请求数据作为响应值返回 # -*- coding: utf-8 -*- # @Time : 2020/2/15 9:47 # @File : do_mock_18.py # @Autho ...

  3. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  4. keepalive笔记之三:keepalived通知脚本进阶示例

    下面的脚本可以接受选项,其中: -s, --service SERVICE,...:指定服务脚本名称,当状态切换时可自动启动.重启或关闭此服务: -a, --address VIP: 指定相关虚拟路由 ...

  5. unittest(20)- 自动更新表格中数据(5)

    # 1. get_data.py from tools import project_path import pandas as pd class GetData: Cookie = None Add ...

  6. 从 ListView 到 RecyclerView 的用法浅析

    文章目录 要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路. ListView,一种在垂直滚动列表中显示条目的视图:RecyclerView,一种在局限的窗口呈现大数据集合的灵活视图.Rec ...

  7. SurfaceView和TextureView的区别

    SurfaceView和TextureView均继承于android.view.View,与其它View不同的是,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能.Surfac ...

  8. Mybatis调用存储过程报错

    Mybatis调用存储过程 贴码 123456 Error querying database. Cause: java.sql.SQLException: User does not have ac ...

  9. python中使用paramiko模块并实现远程连接服务器执行上传下载

    paramiko模块 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系 ...

  10. [置顶] 利用Python 提醒实验室同学值日(自动发送邮件)

    前言: 在实验室里一直存在着一个问题,就是老是有人忘记提醒下一个人值日,然后值日就被迫中断了.毕竟良好的        卫生环境需要大家一起来维护的!没办法只能想出一些小对策了. 解决思路: 首先,我 ...