ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出
HueiFeng 人气:0
# Magicodes.IE Excel图片导入导出
为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,我们将结合社区的建议和意见来进行迭代,您可以点此链接来提交您的意见和建议:
https://github.comhttps://img.qb5200.com/download-x/dotnetcore/Magicodes.IE/issues/46
![](https://imgkr.cn-bj.ufileos.com/17d06429-eed0-416e-948f-db3a714627da.jpg)
## 说明
本章教程主要说明如何使用Magicodes.IE.Excel进行图片的导入导出。
## 要点
- 配置DTO进行Excel图片导出
- 配置DTO进行Excel图片导入
## 图片导入导出特性说明
### ExportImageFieldAttribute
+ **Height**: 高度(默认15)
+ **Width**:宽度(默认50)
+ **Alt**:图片不存在时替换文本
### ImportImageFieldAttribute
+ **ImageDirectory**: 图片存储路径(默认存储到临时目录)
+ **ImportImageTo**:图片导出方式(默认Base64),支持的方式如下所示:
```csharp
///
/// 图片导入类型
///
public enum ImportImageTo
{
///
/// 导入到临时目录
///
TempFolder,
///
/// 导入为base64格式
///
Base64
}
```
## 主要步骤
### 1.安装包Magicodes.IE.Excel
```powershell
Install-Package Magicodes.IE.Excel
```
### 2.使用Magicodes.IE.Excel导出图片到Excel
如下述示例代码所示,我们需要在图片属性上添加**ExportImageFieldAttribute**特性,使用特性的“Width”属性指定图片宽度,“Height”属性指定图片高度,“Alt”属性指定替换文本,也就是当图片不存在时则会显示此文本:
```csharp
[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; }
///
/// 时间测试
///
[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还是一个,如下述代码所示:
```csharp
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:/https://img.qb5200.com/download-x/docs.microsoft.com/en-us/media/microsoft-logo-dark.png";
}
var result = await exporter.Export(filePath, data);
}
```
如上述代码所示,目前图片导出可以设置为远程图片地址,以及本地图片地址,并且也可以设置为null(null将会被替代文本所代替)。效果如下图:
![](https://imgkr.cn-bj.ufileos.com/ea124562-cf98-4d5e-8f53-35855439198b.png)
### 3.使用Magicodes.IE.Excel导入图片
Magicodes.IE.Excel支持从Excel导入图片,仅需使用特性“ImportImageField”。其支持两种导入方式:
+ 导入到临时目录
+ 导入为Base64
仅需设置ImportImageTo属性。
**ImportImageTo枚举**
- **Base64** 导入为base64格式
- **TempFolder** 导入到临时目录
值得注意的是,同上文一样,图片属性字段类型也仅支持string类型。
#### 准备待导入的包含图片的Excel
在开始之前,我们需准备好导入的Excel,本示例中的模板如下图所示:
#### 导入到临时目录
Dto模型如下所示:
```csharp
public class ImportPictureDto
{
[ImporterHeader(Name = "加粗文本")]
public string Text { get; set; }
[ImporterHeader(Name = "普通文本")]
public string Text2 { get; set; }
///
/// 将图片写入到临时目录
///
[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; }
///
/// 将图片写入到临时目录
///
[ImportImageField(ImportImageTo = ImportImageTo.TempFolder)]
[ImporterHeader(Name = "图")]
public string Img { get; set; }
}
```
导入还是那个导入,只是Dto设置变了:
```csharp
public async Task ImportPicture_Test()
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "图片导入模板.xlsx");
var import = await Importer.Import(filePath);
if (import.Exception != null) _testOutputHelper.WriteLine(import.Exception.ToString());
if (import.RowErrors.Count > 0) _testOutputHelper.WriteLine(JsonConvert.SerializeObject(import.RowErrors));
}
```
如下图所示,Excel中的图片就会导入到临时目录。值得注意的是:
+ **图片导入到临时目录之后,如果导入结果符合业务需要,请立即将图片移动到正式存储位置,比如网站目录、云存储等;**
+ 图片导入也支持指定位置,不过不推荐。
![](https://imgkr.cn-bj.ufileos.com/6a4022a1-bc1b-40b6-919b-556dd411d2f8.png)
#### 将图片导入为base64
将图片导入为base64仅需设置“ImportImageTo”属性值为“ImportImageTo.Base64”即可:
```csharp
public class ImportPictureBase64Dto
{
[ImporterHeader(Name = "加粗文本")]
public string Text { get; set; }
[ImporterHeader(Name = "普通文本")]
public string Text2 { get; set; }
///
/// 将图片导入为base64(默认为base64)
///
[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; }
///
/// 将图片导入到临时目录
///
[ImportImageField(ImportImageTo = ImportImageTo.TempFolder)]
[ImporterHeader(Name = "图")]
public string Img { get; set; }
}
```
导入代码同上:
```csharp
public async Task ImportPictureBase64_Test()
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "图片导入模板.xlsx");
var import = await Importer.Import(filePath);
}
```
如下图所示,我们就很方便的得到了图片的base64编码的结果:
![](https://imgkr.cn-bj.ufileos.comhttps://img.qb5200.com/download-x/dffc122b-8996-4844-b647-83c53016a19a.png)
## Reference
https://github.comhttps://img.qb5200.com/download-x/dotnetcore/Magicodes.IE
加载全部内容