导入导出通用库,经过导入导出DTO模型来控制导入和导出,支持Excel、Word、Pdf和Html。html
GitHub地址:https://github.com/xin-lai/Magicodes.IEgit
订阅号
关注“麦扣聊技术”订阅号能够得到最新文章、教程、文档:github
QQ群
编程交流群<85318032>web
产品交流群<897857351>docker
文档官网&官方博客
其余开源库
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", } });
[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 = "数值", 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 = "啊实打实大苏打撒", Name="aa", Number =5000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new ExportTestDataWithAttrs() { Text = "啊实打实大苏打撒", Name="啊实打实大苏打撒", Number =6000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new ExportTestDataWithAttrs() { Text = "啊实打实速度大苏打撒", Name="萨达萨达", Number =6000, Text2 = "忽然他也让他人", Text3 = "sadsad打发打发士大夫的" }, });
[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 = "数值", 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 = "啊实打实大苏打撒", Name="aa", Number =5000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new AttrsLocalizationTestData() { Text = "啊实打实大苏打撒", Name="啊实打实大苏打撒", Number =6000, Text2 = "w萨达萨达萨达撒", Text3 = "sadsad打发打发士大夫的" }, new AttrsLocalizationTestData() { Text = "啊实打实速度大苏打撒", Name="萨达萨达", Number =6000, Text2 = "忽然他也让他人", Text3 = "sadsad打发打发士大夫的" }, });
public class ImportProductDto { /// <summary> /// 产品名称 /// </summary> [ImporterHeader(Name = "产品名称")] public string Name { get; set; } /// <summary> /// 产品代码 /// </summary> [ImporterHeader(Name = "产品代码")] public string Code { get; set; } /// <summary> /// 产品条码 /// </summary> [ImporterHeader(Name = "产品条码")] public string BarCode { get; set; } }
public class ImportProductDto { /// <summary> /// 产品名称 /// </summary> [ImporterHeader(Name = "产品名称")] public string Name { get; set; } /// <summary> /// 产品代码 /// </summary> [ImporterHeader(Name = "产品代码")] public string Code { get; set; } /// <summary> /// 产品条码 /// </summary> [ImporterHeader(Name = "产品条码")] public string BarCode { get; set; } /// <summary> /// 客户Id /// </summary> [ImporterHeader(Name = "客户代码")] public long ClientId { get; set; } /// <summary> /// 产品型号 /// </summary> [ImporterHeader(Name = "产品型号")] 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 }
public class ImportProductDto { /// <summary> /// 产品名称 /// </summary> [ImporterHeader(Name = "产品名称",Description ="必填")] [Required(ErrorMessage = "产品名称是必填的")] public string Name { get; set; } /// <summary> /// 产品代码 /// </summary> [ImporterHeader(Name = "产品代码", Description = "最大长度为8")] [MaxLength(8,ErrorMessage = "产品代码最大长度为8")] public string Code { get; set; } /// <summary> /// 产品条码 /// </summary> [ImporterHeader(Name = "产品条码")] [MaxLength(10, ErrorMessage = "产品条码最大长度为10")] [RegularExpression(@"^\d*$", ErrorMessage = "产品条码只能是数字")] public string BarCode { get; set; } /// <summary> /// 客户Id /// </summary> [ImporterHeader(Name = "客户代码")] public long ClientId { get; set; } /// <summary> /// 产品型号 /// </summary> [ImporterHeader(Name = "产品型号")] 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 }
# 安装libgdiplus库,用于Excel导出 RUN apt-get update && apt-get install -y libgdiplus libc6-dev RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base # 安装libgdiplus库,用于Excel导出 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"]
# 安装fontconfig库,用于Pdf导出 RUN apt-get update && apt-get install -y fontconfig COPY /simsun.ttc /usr/share/fonts/simsun.ttc