Magicodes.IE已支持导出Word、Pdf和Html
關(guān)于Magicodes.IE
導(dǎo)入導(dǎo)出通用庫(kù),通過(guò)導(dǎo)入導(dǎo)出DTO模型來(lái)控制導(dǎo)入和導(dǎo)出,支持Excel、Word、Pdf和Html。
GitHub地址:https://github.com/xin-lai/Magicodes.IE
特點(diǎn)
- 需配合相關(guān)導(dǎo)入導(dǎo)出的DTO模型使用,支持通過(guò)DTO以及相關(guān)特性控制導(dǎo)入導(dǎo)出。配置特性即可控制相關(guān)邏輯和顯示結(jié)果,無(wú)需修改邏輯代碼; 
- 導(dǎo)出支持列頭自定義處理以便支持多語(yǔ)言等場(chǎng)景; 
- 導(dǎo)出支持文本自定義過(guò)濾或處理; 
- 導(dǎo)入支持中間空行自動(dòng)跳過(guò); 
- 導(dǎo)入支持自動(dòng)根據(jù) DTO 生成導(dǎo)入模板,針對(duì)必填項(xiàng)將自動(dòng)標(biāo)注;? 
- 導(dǎo)入支持?jǐn)?shù)據(jù)下拉選擇,目前僅支持枚舉類型; 
- 導(dǎo)入數(shù)據(jù)支持前后空格以及中間空格處理,允許指定列進(jìn)行設(shè)置; 
- 導(dǎo)入支持模板自動(dòng)檢查,數(shù)據(jù)自動(dòng)校驗(yàn),異常統(tǒng)一處理,并提供統(tǒng)一的錯(cuò)誤封裝,包含異常、模板錯(cuò)誤和行數(shù)據(jù)錯(cuò)誤;? 
- 支持導(dǎo)入表頭位置設(shè)置,默認(rèn)為1; 
- 支持導(dǎo)入列亂序,無(wú)需按順序一一對(duì)應(yīng); 
- 支持導(dǎo)入指定列索引,默認(rèn)自動(dòng)識(shí)別; 
- 支持將導(dǎo)入Excel進(jìn)行錯(cuò)誤標(biāo)注; 
- 導(dǎo)入支持截止列設(shè)置,如未設(shè)置則默認(rèn)遇到空格截止; 
- 支持導(dǎo)出HTML、Word、Pdf,支持自定義導(dǎo)出模板; - 導(dǎo)出HTML 
 
- 導(dǎo)出Word 
- 導(dǎo)出Pdf 
- 導(dǎo)入支持重復(fù)驗(yàn)證; 
相關(guān)官方Nuget包
聯(lián)系我們
訂閱號(hào)
關(guān)注“麥扣聊技術(shù)”訂閱號(hào)可以獲得最新文章、教程、文檔:
QQ群
- 編程交流群<85318032> 
- 產(chǎn)品交流群<897857351> 
文檔官網(wǎng)&官方博客
- 文檔官網(wǎng):https://docs.xin-lai.com/ 
- 博客:http://www.cnblogs.com/codelove/ 
其他開(kāi)源庫(kù)
- https://github.com/xin-lai 
- https://gitee.com/magicodes 
VNext
- 生成導(dǎo)入模板時(shí)必填項(xiàng)支持自定義樣式配置 
- CSV支持 
- 導(dǎo)入結(jié)果支持生成HTML輸出 
更新歷史
2019.9.28
- 【導(dǎo)出】修改默認(rèn)的導(dǎo)出HTML、Word、Pdf模板 
- 【導(dǎo)入】添加截?cái)嘈械膯卧獪y(cè)試,以測(cè)試中間空格和結(jié)尾空格 
- 【導(dǎo)入】將【數(shù)據(jù)錯(cuò)誤檢測(cè)】和【導(dǎo)入】單元測(cè)試的Dto分開(kāi),確保全部單元測(cè)試通過(guò) 
- 【文檔】更新文檔 
2019.9.26
- 【導(dǎo)出】支持導(dǎo)出Word、Pdf、HTML,支持自定義導(dǎo)出模板 
- 【導(dǎo)出】添加相關(guān)導(dǎo)出的單元測(cè)試 
- 【導(dǎo)入】支持重復(fù)驗(yàn)證,需設(shè)置ImporterHeader特性的IsAllowRepeat為false 
2019.9.19
- 【導(dǎo)入】支持截止列設(shè)置,如未設(shè)置則默認(rèn)遇到空格截止 
- 【導(dǎo)入】導(dǎo)入支持通過(guò)特性設(shè)置Sheet名稱 
2019.9.18
- 【導(dǎo)入】重構(gòu)導(dǎo)入模塊 
- 【導(dǎo)入】統(tǒng)一導(dǎo)入錯(cuò)誤消息 - Exception :導(dǎo)入異常信息 
- RowErrors :數(shù)據(jù)錯(cuò)誤信息 
- TemplateErrors :模板錯(cuò)誤信息,支持錯(cuò)誤分級(jí) 
- HasError : 是否存在錯(cuò)誤(僅當(dāng)出現(xiàn)異常并且錯(cuò)誤等級(jí)為Error時(shí)返回true) 
 
- 【導(dǎo)入】基礎(chǔ)類型必填自動(dòng)識(shí)別,比如int、double等不可為空類型自動(dòng)識(shí)別,無(wú)需額外設(shè)置Required 
- 【導(dǎo)入】修改Excel模板的Sheet名稱 
- 【導(dǎo)入】支持導(dǎo)入表頭位置設(shè)置,默認(rèn)為1 
- 【導(dǎo)入】支持列亂序(導(dǎo)入模板的列序號(hào)不再需要固定) 
- 【導(dǎo)入】支持列索引設(shè)置 
- 【導(dǎo)入】支持將導(dǎo)入的Excel進(jìn)行錯(cuò)誤標(biāo)注,支持多個(gè)錯(cuò)誤 
- 【導(dǎo)入】加強(qiáng)對(duì)基礎(chǔ)類型和可為空類型的支持 
- 【EPPlus】由于EPPlus.Core已經(jīng)不維護(hù),將EPPlus的包從EPPlus.Core改為EPPlus, 
2019.9.11
- 【導(dǎo)入】導(dǎo)入支持自動(dòng)去除前后空格,默認(rèn)啟用,可以針對(duì)列進(jìn)行關(guān)閉,具體見(jiàn)AutoTrim設(shè)置 
- 【導(dǎo)入】導(dǎo)入Dto的字段允許不設(shè)置ImporterHeader,支持通過(guò)DisplayAttribute特性獲取列名 
- 【導(dǎo)入】導(dǎo)入的Excel移除對(duì)Sheet名稱的約束,默認(rèn)獲取第一個(gè)Sheet 
- 【導(dǎo)入】導(dǎo)入增加對(duì)中間空格的處理支持,需設(shè)置FixAllSpace 
- 【導(dǎo)入】導(dǎo)入完善對(duì)日期類型的支持 
- 【導(dǎo)入】完善導(dǎo)入的單元測(cè)試 
導(dǎo)出 Demo
Demo1-1
普通導(dǎo)出?
public class ExportTestData {public string Name1 { get; set; }public string Name2 { get; set; }public string Name3 { get; set; }public string Name4 { get; set; } }var result = await Exporter.Export(filePath, new List<ExportTestData>() {new ExportTestData(){Name1 = "1",Name2 = "test",Name3 = "12",Name4 = "11",},new ExportTestData(){Name1 = "1",Name2 = "test",Name3 = "12",Name4 = "11",} });Demo1-2
特性導(dǎo)出?
[ExcelExporter(Name = "測(cè)試", TableStyle = "Light10")] public class ExportTestDataWithAttrs {[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; }[ExporterHeader(DisplayName = "數(shù)值", Format = "#,##0")]public double Number { get; set; }[ExporterHeader(DisplayName = "名稱", IsAutoFit = true)]public string Name { get; set; } }var result = await Exporter.Export(filePath, new List<ExportTestDataWithAttrs>(){new ExportTestDataWithAttrs(){Text = "啊實(shí)打?qū)嵈筇K打撒",Name="aa",Number =5000,Text2 = "w薩達(dá)薩達(dá)薩達(dá)撒",Text3 = "sadsad打發(fā)打發(fā)士大夫的"},new ExportTestDataWithAttrs(){Text = "啊實(shí)打?qū)嵈筇K打撒",Name="啊實(shí)打?qū)嵈筇K打撒",Number =6000,Text2 = "w薩達(dá)薩達(dá)薩達(dá)撒",Text3 = "sadsad打發(fā)打發(fā)士大夫的"},new ExportTestDataWithAttrs(){Text = "啊實(shí)打?qū)嵥俣却筇K打撒",Name="薩達(dá)薩達(dá)",Number =6000,Text2 = "突然他也讓他人",Text3 = "sadsad打發(fā)打發(fā)士大夫的"},});Demo1-3
列頭處理或者多語(yǔ)言支持
[ExcelExporter(Name = "測(cè)試", TableStyle = "Light10")] public class AttrsLocalizationTestData {[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; }[ExporterHeader(DisplayName = "數(shù)值", Format = "#,##0")]public double Number { get; set; }[ExporterHeader(DisplayName = "名稱", IsAutoFit = true)]public string Name { get; set; } }ExcelBuilder.Create().WithLocalStringFunc((key) =>{if (key.Contains("文本")){return "Text";}return "未知語(yǔ)言";}).Build();var filePath = Path.Combine(Directory.GetCurrentDirectory(), "testAttrsLocalization.xlsx");if (File.Exists(filePath)) File.Delete(filePath);var result = await Exporter.Export(filePath, new List<AttrsLocalizationTestData>(){new AttrsLocalizationTestData(){Text = "啊實(shí)打?qū)嵈筇K打撒",Name="aa",Number =5000,Text2 = "w薩達(dá)薩達(dá)薩達(dá)撒",Text3 = "sadsad打發(fā)打發(fā)士大夫的"},new AttrsLocalizationTestData(){Text = "啊實(shí)打?qū)嵈筇K打撒",Name="啊實(shí)打?qū)嵈筇K打撒",Number =6000,Text2 = "w薩達(dá)薩達(dá)薩達(dá)撒",Text3 = "sadsad打發(fā)打發(fā)士大夫的"},new AttrsLocalizationTestData(){Text = "啊實(shí)打?qū)嵥俣却筇K打撒",Name="薩達(dá)薩達(dá)",Number =6000,Text2 = "突然他也讓他人",Text3 = "sadsad打發(fā)打發(fā)士大夫的"},});導(dǎo)入 Demo
導(dǎo)入特性(ImporterAttribute):
- HeaderRowIndex:表頭位置 
導(dǎo)入列頭特性(ImporterHeader):
- Name:表頭顯示名稱(不可為空)。 
- Description:表頭添加注釋。 
- Author:注釋作者,默認(rèn)值為“麥扣”。 
- AutoTrim:自動(dòng)過(guò)濾空格,默認(rèn)啟用。 
- FixAllSpace:處理掉所有的空格,包括中間空格。默認(rèn)false。 
- ColumnIndex:列索引,一般不建議設(shè)置。 
導(dǎo)入結(jié)果(ImportResult):
- Data:IList<T>?導(dǎo)入的數(shù)據(jù)集合。 
- RowErrors:IList?數(shù)據(jù)行錯(cuò)誤。 
- HasError:bool?是否存在導(dǎo)入錯(cuò)誤。 
- Exception:異常信息 
- TemplateErrors:模板錯(cuò)誤信息 
Demo2-1 普通模板
生成模板
public class ImportProductDto {/// <summary>/// 產(chǎn)品名稱/// </summary>[ImporterHeader(Name = "產(chǎn)品名稱")]public string Name { get; set; }/// <summary>/// 產(chǎn)品代碼/// </summary>[ImporterHeader(Name = "產(chǎn)品代碼")]public string Code { get; set; }/// <summary>/// 產(chǎn)品條碼/// </summary>[ImporterHeader(Name = "產(chǎn)品條碼")]public string BarCode { get; set; }}導(dǎo)入模板
Demo2-2 多數(shù)據(jù)類型
生成模板
public class ImportProductDto {/// <summary>/// 產(chǎn)品名稱/// </summary>[ImporterHeader(Name = "產(chǎn)品名稱")]public string Name { get; set; }/// <summary>/// 產(chǎn)品代碼/// </summary>[ImporterHeader(Name = "產(chǎn)品代碼")]public string Code { get; set; }/// <summary>/// 產(chǎn)品條碼/// </summary>[ImporterHeader(Name = "產(chǎn)品條碼")]public string BarCode { get; set; }/// <summary>/// 客戶Id/// </summary>[ImporterHeader(Name = "客戶代碼")]public long ClientId { get; set; }/// <summary>/// 產(chǎn)品型號(hào)/// </summary>[ImporterHeader(Name = "產(chǎn)品型號(hào)")]public string Model { get; set; }/// <summary>/// 申報(bào)價(jià)值/// </summary>[ImporterHeader(Name = "申報(bào)價(jià)值")]public double DeclareValue { get; set; }/// <summary>/// 貨幣單位/// </summary>[ImporterHeader(Name = "貨幣單位")]public string CurrencyUnit { get; set; }/// <summary>/// 品牌名稱/// </summary>[ImporterHeader(Name = "品牌名稱")]public string BrandName { get; set; }/// <summary>/// 尺寸/// </summary>[ImporterHeader(Name = "尺寸(長(zhǎng)x寬x高)")]public string Size { get; set; }/// <summary>/// 重量/// </summary>[ImporterHeader(Name = "重量(KG)")]public double Weight { get; set; }/// <summary>/// 類型/// </summary>[ImporterHeader(Name = "類型")]public ImporterProductType Type { get; set; }/// <summary>/// 是否行/// </summary>[ImporterHeader(Name = "是否行")]public bool IsOk { get; set; } } public enum ImporterProductType {[Display(Name = "第一")]One,[Display(Name = "第二")]Two }導(dǎo)入模板
Demo2-3 數(shù)據(jù)驗(yàn)證
生成模板
必填項(xiàng)表頭文本為紅色?
public class ImportProductDto {/// <summary>/// 產(chǎn)品名稱/// </summary>[ImporterHeader(Name = "產(chǎn)品名稱",Description ="必填")][Required(ErrorMessage = "產(chǎn)品名稱是必填的")]public string Name { get; set; }/// <summary>/// 產(chǎn)品代碼/// </summary>[ImporterHeader(Name = "產(chǎn)品代碼", Description = "最大長(zhǎng)度為8")][MaxLength(8,ErrorMessage = "產(chǎn)品代碼最大長(zhǎng)度為8")]public string Code { get; set; }/// <summary>/// 產(chǎn)品條碼/// </summary>[ImporterHeader(Name = "產(chǎn)品條碼")][MaxLength(10, ErrorMessage = "產(chǎn)品條碼最大長(zhǎng)度為10")][RegularExpression(@"^\d*$", ErrorMessage = "產(chǎn)品條碼只能是數(shù)字")]public string BarCode { get; set; }/// <summary>/// 客戶Id/// </summary>[ImporterHeader(Name = "客戶代碼")]public long ClientId { get; set; }/// <summary>/// 產(chǎn)品型號(hào)/// </summary>[ImporterHeader(Name = "產(chǎn)品型號(hào)")]public string Model { get; set; }/// <summary>/// 申報(bào)價(jià)值/// </summary>[ImporterHeader(Name = "申報(bào)價(jià)值")]public double DeclareValue { get; set; }/// <summary>/// 貨幣單位/// </summary>[ImporterHeader(Name = "貨幣單位")]public string CurrencyUnit { get; set; }/// <summary>/// 品牌名稱/// </summary>[ImporterHeader(Name = "品牌名稱")]public string BrandName { get; set; }/// <summary>/// 尺寸/// </summary>[ImporterHeader(Name = "尺寸(長(zhǎng)x寬x高)")]public string Size { get; set; }/// <summary>/// 重量/// </summary>[ImporterHeader(Name = "重量(KG)")]public double Weight { get; set; }/// <summary>/// 類型/// </summary>[ImporterHeader(Name = "類型")]public ImporterProductType Type { get; set; }/// <summary>/// 是否行/// </summary>[ImporterHeader(Name = "是否行")]public bool IsOk { get; set; } } public enum ImporterProductType {[Display(Name = "第一")]One,[Display(Name = "第二")]Two }導(dǎo)入模板
Docker中使用
# 安裝libgdiplus庫(kù),用于Excel導(dǎo)出 RUN apt-get update && apt-get install -y libgdiplus libc6-dev RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dllDockerfile Demo
總結(jié)
以上是生活随笔為你收集整理的Magicodes.IE已支持导出Word、Pdf和Html的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Bumblebee微服务网关之负载策略
- 下一篇: AOP框架Dora.Intercepti
