【问题标题】:How to add a Data validation for a cell in excel using Spreadsheetgear - C# .NET如何使用 Spreadsheetgear - C# .NET 在 Excel 中为单元格添加数据验证
【发布时间】:2016-05-04 00:48:03
【问题描述】:

我想为 Excel 中的单元格添加数据验证以仅允许数值。

我的代码执行以下操作,

SpreadSheetGearHelper hlpr = new SpreadSheetGearHelper(excelFilePath);
cells = workbook.Worksheets[0].Cells;
hlpr.WorkSheet(0).Cells[string.Format("{0}:{0}", colName)].Validation.Add(SpreadsheetGear.ValidationType.WholeNumber, ValidationAlertStyle.Stop,
ValidationOperator.Between, "-9999999", "9999999");
hlpr.WorkSheet(0).Cells[string.Format("{0}:{0}", colName)].NumberFormat = "@";
hlpr.WorkSheet(0).Cells[string.Format("{0}:{0}", colName)].Validation.ErrorMessage = "Please enter a number";

但是当我在excel的范围内输入有效数字时,它仍然说“请输入一个数字”。

有人可以帮我解决这个问题

【问题讨论】:

    标签: c# .net excel validation spreadsheetgear


    【解决方案1】:

    您当前使用的是ValidationType.WholeNumber,它只允许整数,例如 1、2、3,而不是小数,例如 1.23。如果您需要允许所有 数值而不仅仅是整数,您需要指定ValidationType.Decimal。示例:

    using SpreadsheetGear;
    ...
    IWorkbook workbook = Factory.GetWorkbook();
    IWorksheet worksheet = workbook.ActiveWorksheet;
    IRange cells = worksheet.Cells;
    cells["A1"].Validation.Add(ValidationType.Decimal, ValidationAlertStyle.Stop, 
        ValidationOperator.Between, "-9999999", "9999999");
    

    【讨论】:

    • 感谢蒂姆的回复,但即使我将 ValidationType 更改为十进制 - 当我尝试在单元格“请输入数字”中输入数字 (45) 时,它仍然给我同样的错误"
    • 那么在这一点上没有足够的信息来为您提供足够的答案。我测试了您的原始案例的大致等价物,但它使用了 ValidationType.Decimal 并且输入预计限制为 -9999999 和 9999999 之间的任何数字(整数或小数),包括 45。请修改您的问题以包含更清楚地展示问题的代码.它还有助于删除对我们无法轻易复制的未定义变量和对象(如“SpreadSheetGearHelper”或“colName”)的任何引用。我将使用更一般的示例修改我的回复。
    • 所以我删除了 colName 这样的对象以避免混淆并硬编码所有内容。我的代码如下所示 hlpr.WorkSheet(0).Cells["C:C"].Validation.Add(ValidationType.Decimal, ValidationAlertStyle.Stop, ValidationOperator.Between, "-9999999", "9999999");还是一样的问题,不知道为什么会这样
    【解决方案2】:

    看看这个:Apply-Data-Validation-to-Excel-Cells-in-Csharp - CodeProject

            sheet.Range["C9"].DataValidation.AllowType = CellDataType.Decimal;
            sheet.Range["C9"].DataValidation.Formula1 = "-9999999";
            sheet.Range["C9"].DataValidation.Formula2 = "9999999";
            sheet.Range["C9"].DataValidation.CompareOperator = ValidationComparisonOperator.Between;
            sheet.Range["C9"].DataValidation.InputMessage = "Type a number between -9999999-9999999 in this cell.";
    

    我不熟悉 SpreadsheetGear,但本文中的解决方案在我身边运行良好。

    【讨论】:

      【解决方案3】:

      修复它。

      单元格的数字格式设置为文本,这就是为什么每次我输入数字时它都会给我一个错误(即使数据验证设置正确)。因此我添加了以下代码行将其更改为“常规”

      hlpr.WorkSheet(0).Cells[string.Format("{0}:{0}", colName)].NumberFormat = "General";
      

      感谢你们的时间和回复。

      【讨论】:

        猜你喜欢
        • 2012-12-04
        • 2021-09-08
        • 1970-01-01
        • 2019-03-27
        • 2012-01-09
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多