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

ImportImageFieldAttribute
ImageDirectory: 图片存储路径(默认存储到临时目录)
ImportImageTo:图片导出方式(默认Base64),支持的方式如下所示:
///
/// 图片导入类型
///
public enum ImportImageTo
{
///
/// 导入到临时目录
///
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);
    }

导入到临时目录
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(filePath);
}
东莞网站建设www.zg886.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值