首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于NPOI的Excel表条件数据验证

基于NPOI的Excel表条件数据验证
EN

Stack Overflow用户
提问于 2022-05-12 10:22:53
回答 1查看 143关注 0票数 0

我试着做一个excel,在那里输入一些有验证的数据,而且我以前从未使用过npoi (而且我对excel的了解是作为用户),所以我在这里有点迷失了我的目标,也没有在互联网上建立一个直接的答案。

我有一个A,B,C三列的数据表。

'Option2'

  • Column B有5行-> 'A','B','C','D',‘E’

  • 列C有两行-> '1','2'

然后,我有另一张纸,我想输入我的验证。它有两栏:

  • Option1 ->在这里的验证应该在列A上(Option1或Option1 ->这里的验证应该超过“选项”选择)。如果我输入‘inputs.

’,那么Column2列表应该显示

  • ,如果我输入'option2‘,则应该显示Column3

就像这样:

我的密码是这个。如您所见,我的公式约束只适用于columnB数据,因为我甚至不能在两列上完成它(我支持的格式应该是这样的:=' data '!$C$2:$C$3;'Data'!$B$2:$B$6,但它不起作用)

代码语言:javascript
运行
复制
internal static void Validations(ISheet sheet, int countLim)
    {
        // Data Validation 
        XSSFDataValidationHelper validationHelper = new((XSSFSheet)sheet);
        // Option Validation
        CellRangeAddressList optionList = new(1, countLim - 1, 1, 1);
        XSSFDataValidationConstraint tclconstraint = (XSSFDataValidationConstraint)validationHelper.CreateFormulaListConstraint("=Data!$A$2:$A$3");
        XSSFDataValidation tclvalidation = (XSSFDataValidation)validationHelper.CreateValidation(tclconstraint, optionList);
        sheet.AddValidationData(tclvalidation);
        // Result Validation
        CellRangeAddressList resultList = new(1, countLim - 1, 2, 2);
        XSSFDataValidationConstraint opconstraint = (XSSFDataValidationConstraint)validationHelper.CreateFormulaListConstraint("=Data!$B$2:$B$6");
        XSSFDataValidation opvalidation = (XSSFDataValidation)validationHelper.CreateValidation(opconstraint, resultList);
        sheet.AddValidationData(opvalidation);
        
    }

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-17 12:56:02

我最终可以通过java文档实现我的目标(在我看来,这个文档比npoi更广泛)。我最后做的是:

代码语言:javascript
运行
复制
//ColumnA/B List Range 
var namedRange = workbook.CreateName();
namedRange.NameName = "Columns";
string reference = "Data!$A$1:$B$1";
namedRange.RefersToFormula = reference;

//List when option 1
namedRange = workbook.CreateName();
namedRange.NameName = "1Options";
reference = "Data!$A$2:$A$6";
namedRange.RefersToFormula = reference;

//List when option 2
namedRange = workbook.CreateName();
namedRange.NameName = "2Options";
reference = "Data!$B$2:$B$3";
namedRange.RefersToFormula = reference;

//Conditional Validation
var rowNumber = 2;
for (int i = 0; i <= totalRows; i++)
{
    sheet.ActiveCell = new CellAddress("A" + rowNumber);
    var dvHelper = sheet.GetDataValidationHelper();
    var dvConstraint = dvHelper.CreateFormulaListConstraint("Columns");
    CellRangeAddressList checkList = new(1, totalRows - 1, 1, 1);
    var tclvalidation = dvHelper.CreateValidation(dvConstraint, checkList);
    sheet.AddValidationData(tclvalidation);

    dvConstraint = dvHelper.CreateFormulaListConstraint("INDIRECT($A$" + rowNumber + ")");
    CellRangeAddressList conditionList = new(1, totalRows - 1, 2, 2);
    tclvalidation = dvHelper.CreateValidation(dvConstraint, conditionList);
    sheet.AddValidationData(tclvalidation);

    rowNumber++;
}

请注意,我最后只创建了两个列,并将其用作第一个验证列的标题。因此,A栏不皂化和B栏标题改为备选案文1,C栏标题改为备选案文2。

另外,我最后用了两张床单。因此,列表范围是在一个名为“Data”的工作表上进行的,而工作表对象的有效性则是在该表对象上进行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72213877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档