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