excel 验证规则使用 vb.net 使用 spreadsheetgear

excel validation rule using vb.net using spreadsheetgear

我想使用 VB.Net 向 excel 动态添加验证规则,我可以使用 spreadsheetgear

向单元格添加日期验证,如下所示
worksheet.Range(DateRange).Validation.Add(ValidationType.Date, ValidationAlertStyle.Stop, ValidationOperator.Greater, dt, Nothing)
worksheet.Range(DateRange).NumberFormat = "mm/dd/yyyy"

如何为单元格制定仅接受单个字符的验证规则 "x" 和 "X"。提前致谢。

使用 ValidationType.List

将输入限制为 "x,X"

您可以使用 ValidationType.List 枚举选项来完成此操作。示例:

worksheet.Range(SomeRange).Validation.Add(ValidationType.List, ValidationAlertStyle.Stop, ValidationOperator.Default, "x,X", Nothing)

不使用 ValidationType.List

将输入限制为 "x,X"

ValidationType.List 枚举选项将始终在选中单元格时显示下拉列表。如果您不希望出现此下拉列表,则需要采取另一种方法,即提供自定义公式来进行验证 (ValidationType.Custom),这可能需要一些努力才能正常工作,因为您负责验证 SomeRange.

中每个单元格的输入

下面是解决此问题的一般方法(请注意,我使用的实际公式只是完成任务的一种方法......可以使用任何数量的其他公式来做同样的事情):

' Get IRange representing your SomeRange string (say, "A1:B5").  
Dim MyRange As IRange = worksheet.Range(SomeRange)

' Get (relative-referenced) address of top-left cell for SomeRange (A1 in this case).  
' We need to use this cell address in the formula to validate input.  This approach
' will still work fine if "SomeRange" is a single cell instead of a multi-cell reference.
Dim TopLeftCell As String = MyRange(0, 0).GetAddress(False, False,
    ReferenceStyle.A1.A1, False, Nothing)

' Put together a "validation formula" (i.e., =LOWER(A1)="x").
Dim ValidationFormula = String.Format("=LOWER({0})=""x""", TopLeftCell)

' Create validation for all cells in MyRange (A1:B5 in this example), using the 
' ValidationFormula as the basis for this validation.
MyRange.Validation.Add(ValidationType.Custom, ValidationAlertStyle.Stop, 
    ValidationOperator.Default, ValidationFormula, Nothing)