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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在ASP.NET导入导出XLSX文件,可以使用以下原始代码: 1. 导入XLSX文件: 首先,确保已经安装了Open XML SDK。然后,使用以下代码导入XLSX文件: ```csharp protected void btnImport_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { string filePath = Server.MapPath("~/uploads/") + FileUpload1.FileName; FileUpload1.SaveAs(filePath); using (SpreadsheetDocument doc = SpreadsheetDocument.Open(filePath, false)) { WorkbookPart workbookPart = doc.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); foreach (Row row in sheetData.Elements<Row>()) { foreach (Cell cell in row.Elements<Cell>()) { string value = cell.CellValue.InnerText; // 处理单元格值 } } } // 导入成功的逻辑 } } ``` 2. 导出XLSX文件: 要导出XLSX文件,使用以下代码: ```csharp protected void btnExport_Click(object sender, EventArgs e) { string fileName = "export.xlsx"; string filePath = Server.MapPath("~/exports/") + fileName; using (SpreadsheetDocument doc = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook)) { WorkbookPart workbookPart = doc.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(new SheetData()); Sheets sheets = doc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); Sheet sheet = new Sheet() { Id = doc.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" }; sheets.Append(sheet); SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); Row headerRow = new Row(); // 添加表头 sheetData.AppendChild(headerRow); // 添加数据行 // 使用以下代码将数据添加到每一行 workbookPart.Workbook.Save(); doc.Close(); } // 导出成功的逻辑 } ``` 以上代码中,导入操作在按钮单击事件中执行,从上传的XLSX文件中读取数据并进行处理。导出操作也在按钮单击事件中执行,创建一个新的XLSX文件,向其添加表头和数据行,并保存文件到指定路径。 请注意,以上代码仅提供了基本的导入导出XLSX文件的功能,你可以根据自己的需求,对代码进行适当的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值