zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    遥感影像数据产品级别概述
    数据传输中的成帧
    帧同步
    I、Q信号是如何产生的,I、Q信号复用的作用
    调制解调技术
    基带信号、载波信号和宽带信号
    浅谈MVP架构及开发模式
    剑指offer代码 vs2013执行
    进程的状态
    死锁的必要条件及避免
  • 原文地址:https://www.cnblogs.com/yyfh/p/12515229.html
Copyright © 2011-2022 走看看