<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      ?

      導(dǎo)入導(dǎo)出通用庫

      Magicodes.ExporterAndImporter為心萊團(tuán)隊封裝的導(dǎo)入導(dǎo)出通用庫,并且仍在跟隨項目不斷地打磨。

      GitHub地址:https://github.com/xin-lai/Magicodes.ExporterAndImporter
      <https://github.com/xin-lai/Magicodes.ExporterAndImporter>

      ?

      ?

      目錄

      ?

      特點

      相關(guān)官方Nuget包


      導(dǎo)出 Demo


      *
      普通導(dǎo)出


      *
      特性導(dǎo)出

      *
      列頭處理或者多語言支持

      導(dǎo)入Demo

      *
      普通模板

      *
      多數(shù)據(jù)類型

      *
      數(shù)據(jù)驗證

      Docker中使用

      Dockerfile Demo

      ?

      特點

      *
      封裝導(dǎo)入導(dǎo)出業(yè)務(wù),目前僅支持 Excel,有興趣的小伙伴可以考慮支持 CSV 以及PDF或其他格式的導(dǎo)出

      *
      配置特性即可控制相關(guān)邏輯和顯示結(jié)果,無需修改邏輯代碼

      *
      推薦配合 導(dǎo)入導(dǎo)出DTO 使用

      *
      導(dǎo)出支持列頭自定義處理以便支持多語言等場景

      *
      導(dǎo)出支持文本自定義過濾或處理

      *
      導(dǎo)入支持自動根據(jù)導(dǎo)入DTO生成導(dǎo)入模板及模板驗證

      *
      導(dǎo)入支持?jǐn)?shù)據(jù)驗證邏輯

      *
      導(dǎo)入支持?jǐn)?shù)據(jù)下拉選擇

      *
      導(dǎo)入支持注釋添加

      ?

      相關(guān)官方Nuget包

      ?

      導(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 = "測試", 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= "啊實打?qū)嵈筇K打撒", Name="aa", Number =5000, Text2 = "
      w薩達(dá)薩達(dá)薩達(dá)撒", Text3 = "sadsad打發(fā)打發(fā)士大夫的" }, new ExportTestDataWithAttrs() { Text = "
      啊實打?qū)嵈筇K打撒", Name="啊實打?qū)嵈筇K打撒", Number =6000, Text2 = "w薩達(dá)薩達(dá)薩達(dá)撒", Text3 = "
      sadsad打發(fā)打發(fā)士大夫的" }, new ExportTestDataWithAttrs() { Text = "啊實打?qū)嵥俣却筇K打撒", Name="
      薩達(dá)薩達(dá)", Number =6000, Text2 = "突然他也讓他人", Text3 = "sadsad打發(fā)打發(fā)士大夫的" }, });
      ?

      Demo1-3

      列頭處理或者多語言支持



      ?

      ?

      ?
      [ExcelExporter(Name = "測試", 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 "未知語言"; }).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= "啊實打?qū)嵈筇K打撒", Name="aa", Number =5000, Text2 =
      "w薩達(dá)薩達(dá)薩達(dá)撒", Text3 = "sadsad打發(fā)打發(fā)士大夫的" }, new AttrsLocalizationTestData() { Text =
      "啊實打?qū)嵈筇K打撒", Name="啊實打?qū)嵈筇K打撒", Number =6000, Text2 = "w薩達(dá)薩達(dá)薩達(dá)撒", Text3 = "
      sadsad打發(fā)打發(fā)士大夫的" }, new AttrsLocalizationTestData() { Text = "啊實打?qū)嵥俣却筇K打撒", Name="
      薩達(dá)薩達(dá)", Number =6000, Text2 = "突然他也讓他人", Text3 = "sadsad打發(fā)打發(fā)士大夫的" }, });
      ?

      導(dǎo)入 Demo

      導(dǎo)入特性(ImporterHeader):

      *
      Name:string?表頭顯示名稱(不可為空)。

      *
      Description:string?表頭添加注釋。

      *
      Author:string?注釋作者,默認(rèn)值為X.M。

      導(dǎo)入結(jié)果(ImportModel<T>):

      *
      Data:IList<T>??導(dǎo)入的數(shù)據(jù)集合。

      *
      ValidationResults:IList<ValidationResultModel>?數(shù)據(jù)驗證結(jié)果。

      *
      HasValidTemplate:bool?模板驗證是否通過。

      數(shù)據(jù)驗證結(jié)果(ValidationResultModel):

      *
      Index:int??錯誤數(shù)據(jù)所在行。

      *
      Errors:IDictionary<string, string>?整個Excel錯誤集合。目前僅支持?jǐn)?shù)據(jù)驗證錯誤。

      *
      FieldErrors:IDictionary<string, string>?數(shù)據(jù)驗證錯誤。

      ?

      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)品型號 /// </summary> [ImporterHeader(Name = "產(chǎn)品型號")] public string Model {
      get; set; } /// <summary> /// 申報價值 /// </summary> [ImporterHeader(Name = "申報價值"
      )]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
      ="尺寸(長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ù)驗證

      生成模板

      必填項表頭文本為紅色


      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 = "最大長度為8")] [MaxLength(8
      ,ErrorMessage ="產(chǎn)品代碼最大長度為8")] public string Code { get; set; } /// <summary> ///
      產(chǎn)品條碼/// </summary> [ImporterHeader(Name = "產(chǎn)品條碼")] [MaxLength(10, ErrorMessage
      ="產(chǎn)品條碼最大長度為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)品型號 /// </summary> [ImporterHeader(Name = "產(chǎn)品型號")] public string Model {
      get; set; } /// <summary> /// 申報價值 /// </summary> [ImporterHeader(Name = "申報價值"
      )]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
      ="尺寸(長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庫,用于Excel導(dǎo)出 RUN apt-get update && apt-get install -y libgdiplus
      libc6-dev RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
      Dockerfile Demo
      FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base # 安裝libgdiplus庫,用于Excel導(dǎo)出
      RUN apt-get update && apt-get install -y libgdiplus libc6-dev RUN ln -s
      /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll WORKDIR /app EXPOSE 80 FROM
      microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY ["
      src/web/Admin.Host/Admin.Host.csproj", "src/web/Admin.Host/"] COPY ["
      src/web/Admin.Web.Core/Admin.Web.Core.csproj", "src/web/Admin.Web.Core/"] COPY [
      "src/application/Admin.Application/Admin.Application.csproj", "
      src/application/Admin.Application/"] COPY ["
      src/core/Magicodes.Admin.Core/Magicodes.Admin.Core.csproj", "
      src/core/Magicodes.Admin.Core/"] COPY ["
      src/data/Magicodes.Admin.EntityFrameworkCore/Magicodes.Admin.EntityFrameworkCore.csproj
      ", "src/data/Magicodes.Admin.EntityFrameworkCore/"] COPY ["
      src/core/Magicodes.Admin.Core.Custom/Magicodes.Admin.Core.Custom.csproj", "
      src/core/Magicodes.Admin.Core.Custom/"] COPY ["
      src/application/Admin.Application.Custom/Admin.Application.Custom.csproj", "
      src/application/Admin.Application.Custom/"] RUN dotnet restore "
      src/web/Admin.Host/Admin.Host.csproj" COPY . . WORKDIR "/src/src/web/Admin.Host"
      RUN dotnet build"Admin.Host.csproj" -c Release -o /app FROM build AS publish
      RUN dotnet publish"Admin.Host.csproj" -c Release -o /app FROM base AS final
      WORKDIR/app COPY --from=publish /app . ENTRYPOINT ["dotnet", "
      Magicodes.Admin.Web.Host.dll"]
      ?
      ?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          欧美三级自拍 | 乳妇喂奶被强伦子 | 國產精品77777777777 | 中文字幕日韩无码视频 | www.91 | 免费的三及片 | 性生活视频免费观看 | 美女被捅爽| 男生用手指帮我弄得好爽 | 麻豆成人精品国产免费 |