Giter VIP home page Giter VIP logo

Comments (7)

WeihanLi avatar WeihanLi commented on August 26, 2024

暂时不支持,目前只支持配置一个委托对数据进行过滤,过滤掉不想要的数据
我之前是把数据导出来在业务代码里判断的

from weihanli.npoi.

ZeguangZhang94 avatar ZeguangZhang94 commented on August 26, 2024

好的,谢谢

from weihanli.npoi.

WeihanLi avatar WeihanLi commented on August 26, 2024

你希望怎么返回错误信息呢?感觉有可能会造成破坏性变更,没想好怎么改,有想法的话欢迎 PR

from weihanli.npoi.

ZeguangZhang94 avatar ZeguangZhang94 commented on August 26, 2024

感觉抛异常,或者返回的对象变成excel数据+异常信息,异常信息包含对数据的校验结果,某行某列的数据应该是int,但是实际是string,前一种方式可能会造成获取不到表格数据,后面的方式并不对返回的数据造成实际影响,只是单纯的将错误信息返回。

from weihanli.npoi.

WeihanLi avatar WeihanLi commented on August 26, 2024

嗯,我想可以加一个方法 ExcelHelper.ToEntityList(string path, out Dictionary<int, List<ValidateResult>> errors),原来的方法不进行校验,error 的 key 是 RowIndex 表示行号,value 是 System.ComponentModel.DataAnnotations.ValidationResult,还需要再想一下,默认走微软的 DataAnnotation 那一套,也可以使用 FluentValiation 或者自己扩展

from weihanli.npoi.

ZeguangZhang94 avatar ZeguangZhang94 commented on August 26, 2024

这个可以,我也去用DataAnnotation试一下

from weihanli.npoi.

WeihanLi avatar WeihanLi commented on August 26, 2024

发布了一个新版本 https://www.nuget.org/packages/WeihanLi.Npoi/2.0.0-preview-20220409-173325,可以试一下

ExcelHelper 增加了 ToEntityListWithValidationResult

(List<TEntity?> EntityList, Dictionary<int, ValidationResult> ValidationResults) ToEntityListWithValidationResult<TEntity>()

默认会使用 DataAnnotation 方式进行数据校验,使用可以参考单元测试

    [Theory]
    [ExcelFormatData]
    public void ValidatorTest(ExcelFormat excelFormat)
    {
        var list = new List<Job>()
        {
            new()
            {
                Id = 1,
                Name = "test"
            },
            new()
        };
        var bytes = list.ToExcelBytes(excelFormat);
        var result = ExcelHelper.ToEntityListWithValidationResult<Job>(bytes, excelFormat);
        Assert.Equal(list.Count, result.EntityList.Count);
        for (var i = 0; i < list.Count; i++)
        {
            Assert.True(list[i] == result.EntityList[i]);
        }
        Assert.Single(result.ValidationResults);
    }

    [Theory]
    [ExcelFormatData]
    public void ValidatorTest_CustomValidator(ExcelFormat excelFormat)
    {
        var list = new List<Job>()
        {
            new()
            {
                Id = 1,
                Name = "test"
            }
        };
        var validator = new DelegateValidator<Job>(_ => new ValidationResult()
        {
            Valid = false,
            Errors = new Dictionary<string, string[]>() { { "", new[] { "Mock error" } } }
        });
        var bytes = list.ToExcelBytes(excelFormat);
        var result = ExcelHelper.ToEntityListWithValidationResult<Job>(bytes, excelFormat, validator: validator);
        Assert.Equal(list.Count, result.EntityList.Count);
        for (var i = 0; i < list.Count; i++)
        {
            Assert.True(list[i] == result.EntityList[i]);
        }
        Assert.Single(result.ValidationResults);
    }

from weihanli.npoi.

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.