欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出

程序员文章站 2022-12-09 12:51:49
Magicodes.IE Excel图片导入导出 为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,我们将结合社区的建议和意见来进行迭代,您可以点此链接来提交您的意见和建议: https://github.com/dotnetcore/Magicodes.IE/issues/46 说明 本章教 ......

magicodes.ie excel图片导入导出

为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,我们将结合社区的建议和意见来进行迭代,您可以点此链接来提交您的意见和建议:
https://github.com/dotnetcore/magicodes.ie/issues/46

ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出

说明

本章教程主要说明如何使用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将会被替代文本所代替)。效果如下图:

ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出

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中的图片就会导入到临时目录。值得注意的是:

  • 图片导入到临时目录之后,如果导入结果符合业务需要,请立即将图片移动到正式存储位置,比如网站目录、云存储等;
  • 图片导入也支持指定位置,不过不推荐。

ASP.NET 开源导入导出库Magicodes.IE 完成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编码的结果:

ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出

reference

https://github.com/dotnetcore/magicodes.ie