GithubHelp home page GithubHelp logo

Comments (13)

xin-lai avatar xin-lai commented on July 24, 2024

请提供下完整的Demo(包含Excel文件)。谢谢。

from magicodes.ie.

zsanhong avatar zsanhong commented on July 24, 2024

TestMagicIE.zip
例子里可以看出Magicodes.IE至少有两个bug,我在注释里写的很详细

from magicodes.ie.

zsanhong avatar zsanhong commented on July 24, 2024
  public  class SalaryDTO
    {
        [ImporterHeader(Name = "工资月份")]
        [Required]
        public DateTime SalaryDate { get; set; }
       
        /// <summary>
        /// 员工姓名
        /// </summary>
        [ImporterHeader(Name = "员工姓名")]
        [Required]
        [MaxLength(50, ErrorMessage = "员工姓名字数超过最大长度50的限制")]
        public string EmpName { get; set; }
      
        /// <summary>
        /// 岗级工资
        /// </summary>
        [ImporterHeader(Name = "岗级工资")]
        [Required]
        public decimal PostSalary { get; set; }
    }
public class Salary
    {
      
        [Required]
        public DateTime SalaryDate { get; set; }

        /// <summary>
        /// 员工姓名
        /// </summary>
       // [ImporterHeader(Name = "员工姓名")]
        [Required]
        [MaxLength(50, ErrorMessage = "员工姓名字数超过最大长度50的限制")]
        public string EmpName { get; set; }

        /// <summary>
        /// 岗级工资
        /// </summary>
      //  [ImporterHeader(Name = "岗级工资")]
        [Required]
        public decimal PostSalary { get; set; }
    }

导出的代码很简单:

  IImporter Importer = new ExcelImporter();
            IExporter exporter = new ExcelExporter();
            List<SalaryDTO> dtos = new List<SalaryDTO>();
            dtos.Add(new SalaryDTO { EmpName = "郑是", PostSalary = 2345.13M, SalaryDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")) });
            dtos.Add(new SalaryDTO { EmpName = "邓五年", PostSalary = 4345.06M, SalaryDate = Convert.ToDateTime(DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd")) });
            Importer.GenerateTemplate<SalaryDTO>("salarytemplate.xlsx");//这样导出标题栏已经汉化
            exporter.Export("newSalary.xlsx", dtos);//这样导出表头没有汉化

得到两个excel表,其中一个salarytemplate.xlsx表头汉化了,newSalary.xlsx没有汉化。
导出数据后,我还想把它导回来,导入的代码也很简单:

 IImporter Importer = new ExcelImporter();
            // var result= await  Importer.Import<SalaryDTO>("newSalary.xlsx");//如果用这个导入,取不到数据
             var result= await  Importer.Import<Salary>("newSalary.xlsx");//如果用这个导入,SalaryDate没有值,也是一个bug

            bindingSource1.DataSource = result.Data;
            dataGridView1.DataSource = bindingSource1;

用注释的那行代码取不到数据,因为导出的数据的类型是Salary类,但如果用Salary做为导入数据源,SalaryDate没有正确识别。
非常感谢开源Magicodes.IE,不过明显的bug请尽快更正,感谢!

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

看了下,这个不是Bug。因为导入导出的Dto使用的同一个,您只设置了导入的Header特性,并没有设置导出的Header特性。所以导出的Excel表头使用是的属性名称。

from magicodes.ie.

zsanhong avatar zsanhong commented on July 24, 2024

谢谢,还有个问题,导入的SalaryDate没有数据,请问还要怎么设置。我增加了:

  [ImporterHeader(Name = "工资月份")]
        [ExporterHeader(DisplayName = "工资月份",Format ="yyyy-MM-dd")]
        [Required]
        public DateTime SalaryDate { get; set; }

还是不起作用

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

@zsanhong 方便将结果截图么?

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

@zsanhong 见我们的单元测试:ExcelExporter_Tests 的AttrsExport_Test,相关验证逻辑一直是通过的:

        [Fact(DisplayName = "DTO特性导出(测试格式化)")]
        public async Task AttrsExport_Test()
        {
            IExporter exporter = new ExcelExporter();

            var filePath = GetTestFilePath($"{nameof(AttrsExport_Test)}.xlsx");

            DeleteFile(filePath);

            var data = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>(100);
            foreach (var item in data)
            {
                item.LongNo = 45875266524;
            }
            var result = await exporter.Export(filePath, data);
            result.ShouldNotBeNull();
            File.Exists(filePath).ShouldBeTrue();
            using (var pck = new ExcelPackage(new FileInfo(filePath)))
            {
                pck.Workbook.Worksheets.Count.ShouldBe(1);
                var sheet = pck.Workbook.Worksheets.First();
                sheet.Cells[sheet.Dimension.Address].Rows.ShouldBe(101);
                sheet.Cells["A2"].Text.ShouldBe(data[0].Text);

                //[ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")]
                sheet.Cells["E2"].Text.Equals(DateTime.Parse(sheet.Cells["E2"].Text).ToString("yyyy-MM-dd"));

                //[ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]
                sheet.Cells["F2"].Text.Equals(DateTime.Parse(sheet.Cells["F2"].Text).ToString("yyyy-MM-dd HH:mm:ss"));

                //默认DateTime
                sheet.Cells["G2"].Text.Equals(DateTime.Parse(sheet.Cells["G2"].Text).ToString("yyyy-MM-dd"));

            }
        }

from magicodes.ie.

zsanhong avatar zsanhong commented on July 24, 2024

image

麻烦看看我上传的例子为什么导入时取不到SalaryDate的值

TestMagicIE.zip

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

根据你的代码,我这边导出正常(用的最新的2.1.4的包):
image
导入好像有点问题,有空了我再跟进下

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

@zsanhong 已确认日期导入这里存在一个Bug,稍后我们会修复并发布一个版本。

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

@zsanhong 该问题已在develop分支修复,对应单元测试为 ExportAndImportUseOneDto_Test 。明天我们将会基于成功的构建进行发包。非常感谢!

from magicodes.ie.

zsanhong avatar zsanhong commented on July 24, 2024

感谢你们的杰出工作,顺便说一下,我也在长沙,有机会向你们学习!

from magicodes.ie.

xin-lai avatar xin-lai commented on July 24, 2024

@zsanhong
你可以使用最新的包【2.2.0-beta2】试试。
多多交流学习。在社区群里没?
希望后续能够多多支持此项目,加入管理委员会。

from magicodes.ie.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.