zoukankan      html  css  js  c++  java
  • ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出

    Magicodes.IE Csv导入导出

    说明

    本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出.

    主要步骤

    1.安装包Magicodes.IE.Csv

    Install-Package Magicodes.IE.Csv
    

    2.使用Magicodes.IE.Csv导出Csv

    通过如下代码片段我们将导出的内容通过相应的特性做出相应的处理.

    ExporterHeaderAttribute

    • DisplayName: 显示名称
    • Format: 格式化
    • IsIgnore: 是否忽略
        public class ExportTestDataWithAttrs
        {
            [ExporterHeader(DisplayName = "文本")]
            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 decimal Number { get; set; }
            [ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
            public string Name { get; set; }
    
            /// <summary>
            /// 时间测试
            /// </summary>
            [ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")]
            public DateTime Time1 { get; set; }
    
            /// <summary>
            /// 时间测试
            /// </summary>
            [ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]
            public DateTime? Time2 { get; set; }
    
            public DateTime Time3 { get; set; }
    
            public DateTime Time4 { get; set; }
    
            /// <summary>
            /// 长数值测试
            /// </summary>
            [ExporterHeader(DisplayName = "长数值", Format = "#,##0")]
            public long LongNo { get; set; }
        }
    

    通过DTO导出

            public async Task ExportHeaderAsByteArray_Test()
            {
                IExporter exporter = new CsvExporter();
    
                var filePath = GetTestFilePath($"{nameof(ExportHeaderAsByteArray_Test)}.csv");
    
                DeleteFile(filePath);
    
                var result = await exporter.ExportHeaderAsByteArray(GenFu.GenFu.New<ExportTestDataWithAttrs>());
            }
    
    

    3.使用Magicodes.IE.Csv导入Csv

    对于csv导入我们可以通过,ImporterHeader Name属性去对应我们的Dto属性.并且可以通过ValueMapping对枚举类型进行相关的映射,并向我们返回相对应的值

            public async Task StudentInfoImporter_Test()
            {
                var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "学生基础数据导入.csv");
                var import = await Importer.Import<ImportStudentDto>(filePath);
            }
    
     /// <summary>
        /// 导入学生数据Dto
        /// </summary>
        public class ImportStudentDto
        {
            /// <summary>
            ///     序号
            /// </summary>
            [ImporterHeader(Name = "序号")]
            public long SerialNumber { get; set; }
    
            /// <summary>
            ///     学籍号
            /// </summary>
            [ImporterHeader(Name = "学籍号")]
            public string StudentCode { get; set; }
            /// <summary>
            ///     姓名
            /// </summary>
            [ImporterHeader(Name = "姓名")]
            public string Name { get; set; }
    
            /// <summary>
            ///     身份证号码
            /// </summary>
            [ImporterHeader(Name = "身份证号")]
            public string IdCard { get; set; }
    
            /// <summary>
            ///     性别
            /// </summary>
            [ImporterHeader(Name = "性别")]
            [ValueMapping("男", 0)]
            [ValueMapping("女", 1)]
            public Genders Gender { get; set; }
    
            /// <summary>
            ///     家庭地址
            /// </summary>
            [ImporterHeader(Name = "家庭住址")]
            public string Address { get; set; }
    
            /// <summary>
            ///     家长姓名
            /// </summary>
            [ImporterHeader(Name = "家长姓名")]
            public string Guardian { get; set; }
    
            /// <summary>
            ///     家长联系电话
            /// </summary>
            [ImporterHeader(Name = "家长联系电话")]
            public string GuardianPhone { get; set; }
    
            /// <summary>
            ///     学号
            /// </summary>
            [ImporterHeader(Name = "学号")]
            public string StudentNub { get; set; }
    
            /// <summary>
            ///     宿舍号
            /// </summary>
            [ImporterHeader(Name = "宿舍号")]
            public string DormitoryNo { get; set; }
    
            /// <summary>
            ///     QQ
            /// </summary>
            [ImporterHeader(Name = "QQ号")]
            public string QQ { get; set; }
    
            /// <summary>
            ///     民族
            /// </summary>
            [ImporterHeader(Name = "民族")]
            public string Nation { get; set; }
    
            /// <summary>
            ///     户口性质
            /// </summary>
            [ImporterHeader(Name = "户口性质")]
            public string HouseholdType { get; set; }
    
            /// <summary>
            ///     联系电话
            /// </summary>
            [ImporterHeader(Name = "学生联系电话")]
            public string Phone { get; set; }
    
            /// <summary>
            ///     状态
            ///     测试可为空的枚举类型
            /// </summary>
            [ImporterHeader(Name = "状态")] 
            public StudentStatus? Status { get; set; }
    
            /// <summary>
            ///     备注
            /// </summary>
            [ImporterHeader(Name = "备注")]
            public string Remark { get; set; }
    
            /// <summary>
            ///     是否住校(宿舍)
            /// </summary>
            [ImporterHeader(IsIgnore = true)]
            public bool? IsBoarding { get; set; }
    
            /// <summary>
            ///     所属班级id
            /// </summary>
            [ImporterHeader(IsIgnore = true)]
            public Guid ClassId { get; set; }
    
            /// <summary>
            ///     学校Id
            /// </summary>
            [ImporterHeader(IsIgnore = true)]
            public Guid? SchoolId { get; set; }
    
            /// <summary>
            ///     校区Id
            /// </summary>
            [ImporterHeader(IsIgnore = true)]
            public Guid? CampusId { get; set; }
    
            /// <summary>
            ///     专业Id
            /// </summary>
            [ImporterHeader(IsIgnore = true)]
            public Guid? MajorsId { get; set; }
    
            /// <summary>
            ///     年级Id
            /// </summary>
            [ImporterHeader(IsIgnore = true)]
            public Guid? GradeId { get; set; }
        }
    
    

    Reference

    https://github.com/dotnetcore/Magicodes.IE

  • 相关阅读:
    外文翻译 《How we decide》多巴胺的预言 第三节
    外文翻译 《How we decide》多巴胺的预言 第二节
    WPF学习12:基于MVVM Light 制作图形编辑工具(3)
    外文翻译 《How we decide》多巴胺的预言 第一节
    xcode上真机调试iphone4s出现“There was an internal API error.”解决方案
    cocos2d-x v2.2 IOS工程支持64-bit 遇坑记录
    简单优化:Zipalign
    Error: could not open `C:Javajre7libi386jvm.cfg
    【ios开发之疑难杂症】xcode运行出现SpringBoard 无法启动应用程序(错误:7)
    java IntelliJ IDEA 13 注册码 IDEA序列号 License Key
  • 原文地址:https://www.cnblogs.com/yyfh/p/12886258.html
Copyright © 2011-2022 走看看