1. 程式人生 > >ASP.NET 開源匯入匯出庫Magicodes.IE 完成Excel圖片匯入匯出

ASP.NET 開源匯入匯出庫Magicodes.IE 完成Excel圖片匯入匯出

# Magicodes.IE Excel圖片匯入匯出 為了更好的根據實際功能來迭代,從2.2的里程碑規劃開始,我們將結合社群的建議和意見來進行迭代,您可以點此連結來提交您的意見和建議: https://github.com/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://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.com/dffc122b-8996-4844-b647-83c53016a19a.png) ## Reference https://github.com/dotnetcore/Magicodes.IE