2017-04-01 1 views
1

J'utilise EPPlus comme serveur de calculs. Voici mon code:Comment fonctionne la méthode Validate de EPPlus?

using (var xlp = new ExcelPackage(stream)) 
{ 
OfficeOpenXml.ExcelWorksheet Sheet = xlp.Workbook.Worksheets["sheet1"]; 
//Some code for feeding user data to excel sheet 
//... 

//We first invoke calculate method to let contraints of data validation get updated. 
xlp.Workbook.Calculate(); 

var v = Sheet.DataValidations["A1"]; 
if (v != null) 
{ 
    switch (v.ValidationType.Type) 
    { 
     case OfficeOpenXml.DataValidation.eDataValidationType.DateTime:  
      OfficeOpenXml.DataValidation.ExcelDataValidationDateTime V1 = (OfficeOpenXml.DataValidation.ExcelDataValidationDateTime)v; 
      try 
      { 
       //this line doesn't do any thing 
       V1.Validate(); 
      } 
      catch 
      { 
      }   
     break; 
     case ... 
    } 
} 
} 

J'avais lu quelque part que la méthode validate() émet une exception pour les données non valides. Ce n'est pas le cas. Ma question: Comment utiliser la méthode Validate()?

Répondre

1

Cela dépend de ce que le contenu de la cellule et les paramètres de l'opérateur du validateur:

http://epplus.codeplex.com/SourceControl/latest#EPPlus/DataValidation/ExcelDataValidationOperator.cs

/// <summary> 
/// Operator for comparison between Formula and Formula2 in a validation. 
/// </summary> 
public enum ExcelDataValidationOperator 
{ 
    any, 
    equal, 
    notEqual, 
    lessThan, 
    lessThanOrEqual, 
    greaterThan, 
    greaterThanOrEqual, 
    between, 
    notBetween 
} 

Le ExcelDataValidationDateTime (éventuellement) dérive de ExcelDataValidationWithFormula<IExcelDataValidationFormulaDateTime> qui contient le implemenation de Validate():

http://epplus.codeplex.com/SourceControl/latest#EPPlus/DataValidation/ExcelDataValidationWithFormula.cs

public override void Validate() 
{ 
    base.Validate(); 
    if (Operator == ExcelDataValidationOperator.between || Operator == ExcelDataValidationOperator.notBetween) 
    { 
     if (string.IsNullOrEmpty(Formula2Internal)) 
     { 
      throw new InvalidOperationException("Validation of " + Address.Address + " failed: Formula2 must be set if operator is 'between' or 'notBetween'"); 
     } 
    } 
} 

Il lancera une exception (invalide) lorsque l'opération de validation est soit ExcelDataValidationOperator.between ou ExcelDataValidationOperator.notBetween et Forumla2 est pas définie (à ne pas confondre avec le Formula primaire). En d'autres termes, il considère que le validateur est invalide lorsque vous utilisez une opération qui nécessite deux valeurs/formules à comparer mais une seule est définie.

+0

Merci, Alors, cela ne valide-t-il pas le contenu de la cellule? la validation du contenu doit être effectuée manuellement? –

+0

@AlirezaAhmadiRad Au moment du design, non, cette fonction ne valide pas le contenu juste la définition du validateur lui-même. Lorsque l'utilisateur ouvre le fichier Excel et ajoute du contenu, la validation vérifie son entrée. En ce qui concerne la validation de la valeur de la cellule dans le code, je ne crois pas qu'EPPlus ait la capacité, je présume, de s'attendre à ce que le développeur le gère. – Ernie