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

(0)

相关推荐

  • Magicodes.Wx.Sdk之30秒编写一个微信接口

    移动开发和人工智能 4天前以下文章来源于麦扣聊技术 ,作者magiccodes 麦扣聊技术「 Magiccodes 」公众号坚持发布原创精品内容,分享在互联网.IT.产品管理.程序生涯.编程.架构.框 ...

  • Magicodes.IE在.NET Core中通过请求头导出多种格式文件

    前言 在2.2里程碑中我们增加了一些新的功能,正如标题所写通过请求头进行导出我们不同格式的文件.下面我们来看一下如何使用.通过这种方式无论是对我们的数据多用途,还是说对我们的数据校验都做到了轻松易配. ...

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

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

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

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

  • ASP.NET 开源导入导出库Magicodes.IE 导出Excel教程

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

  • ASP.NET 开源导入导出库Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新历史 2019.02.13 [Nuget]版本更新到2.0.2 [导入]修复单列导入的Bug,单元测试"OneColumnImporter_ ...

  • C# WPF开源控件库:MahApps.Metro

    其实站长很久之前就知道这个开源WPF控件库了,只是一直欣赏不了这种风格,但也star了该项目.每次浏览该仓库时,发现star越来越多,也看到很多网友对它的褒奖,所以今天就向大家推荐这款WPF控件库. ...

  • 开源OCR识别库

    最近在github上面看到一个开源的ocr文字识别库,感觉效果还可以,所以在这里介绍一下,这个项目的原地址在:https://github.com/tesseract-ocr/tesseract. t ...

  • 嵌入式相关开源项目、库、资料

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资料库. ...

  • [AHK]Access和Excel之间导入导出玩法

    /*ACCESS与EXCEL文件的互导一.将表导出为EXCEL07-2003表:Select * INTO [EXCEL 8.0;DATABASE=E:\TEMP\info.XLS].infoFROM ...

  • kornia-PyTorch的开源计算机视觉python库

    Kornia是一个微计算机视觉库PyTorch. 它由一组例程和可区分模块组成,用于解决通用计算机视觉问题.该软件包的核心是使用PyTorch作为其主要后端,以提高效率并利用反向模式自动微分来定义和计 ...