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