Convalida dei dati

Tipi ed esecuzione della convalida dei dati

Microsoft Excel supporta diversi tipi di convalida dei dati. Ogni tipo viene utilizzato per controllare quale tipo di dati viene inserito in una cella o in un intervallo di celle. Di seguito, frammenti di codice illustrano come convalidare che:

  • I numeri sono interi, cioè, che non hanno una parte decimale.
  • I numeri decimali seguono la struttura corretta. L’esempio di codice definisce che un intervallo di celle dovrebbe avere due posizioni decimali.
  • I valori sono limitati a un elenco di valori. La convalida della lista definisce un elenco separato di valori che possono essere applicati a una cella o a un intervallo di celle.
  • Le date rientrano in un intervallo specifico.
  • L’ora rientra in un intervallo specifico.
  • Un testo rientra in una data lunghezza specifica di caratteri.

Convalida dei dati con Microsoft Excel

Per creare convalide utilizzando Microsoft Excel:

  1. In un foglio di lavoro, selezionare le celle a cui si desidera applicare la convalida.

  2. Dal menu Dati, selezionare Convalida. Viene visualizzata la finestra di dialogo di convalida.

  3. Fare clic sulla scheda Impostazioni e immettere le impostazioni come mostrato di seguito. 

    Impostazioni di convalida dei dati

todo:image_alt_text

Convalida dei dati con Aspose.Cells

La convalida dei dati è una funzionalità potente per convalidare le informazioni inserite nei fogli di lavoro. Con la convalida dei dati, gli sviluppatori possono fornire agli utenti un elenco di scelte, limitare le voci di dati a un tipo o dimensione specifici, ecc. In Aspose.Cells, ogni classe Foglio di lavoro ha un oggetto Convalida che rappresenta una raccolta di oggetti Convalida. Per impostare la convalida, impostare alcune proprietà della classe Convalida:

  • Tipo: rappresenta il tipo di convalida, che può essere specificato utilizzando uno dei valori predefiniti nell’enumerazione ValidationType.
  • Operatore: rappresenta l’operatore da utilizzare nella convalida, che può essere specificato utilizzando uno dei valori predefiniti nell’enumerazione OperatorType.
  • Formula1: rappresenta il valore o l’espressione associata alla prima parte della convalida dei dati.
  • Formula2: rappresenta il valore o l’espressione associata alla seconda parte della convalida dei dati.

Una volta configurate le proprietà dell’oggetto Convalida, gli sviluppatori possono utilizzare la struttura CellArea per memorizzare informazioni sul intervallo di celle che verrà convalidato utilizzando la convalida creata.

Tipi di Convalida dei Dati

La convalida dei dati consente di integrare regole aziendali in ciascuna cella in modo che le voci non corrette generino messaggi di errore. Le regole aziendali sono le politiche e le procedure che regolano il funzionamento di un’azienda. Aspose.Cells supporta tutti i principali tipi di convalida dei dati.

L’enumerazione ValidationType ha i seguenti membri:

Nome Membr* Descrizione
ANY_VALUE Indica un valore di qualsiasi tipo.
WHOLE_NUMBER Indica il tipo di convalida per i numeri interi.
DECIMAL Indica il tipo di convalida per i numeri decimali.
LIST Indica il tipo di convalida per elenco a discesa.
DATE Indica il tipo di convalida per le date.
TIME Indica il tipo di convalida per l’ora.
TEXT_LENGTH Indica il tipo di convalida per la lunghezza del testo.
CUSTOM Indica il tipo di convalida personalizzato.

Esempio di programmazione: convalida dati numerici interi

Con questo tipo di convalida, gli utenti possono inserire solo numeri interi entro un determinato intervallo nelle celle convalidate. Gli esempi di codice che seguono mostrano come implementare il tipo di convalida WHOLE_NUMBER. L’esempio crea la stessa convalida dei dati utilizzando Aspose.Cells, che abbiamo creato utilizzando Microsoft Excel sopra.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(WholeNumberDataValidation.class) + "data/";
// Instantiating an Workbook object
Workbook workbook = new Workbook();
WorksheetCollection worksheets = workbook.getWorksheets();
// Accessing the Validations collection of the worksheet
Worksheet worksheet = worksheets.get(0);
// Applying the validation to a range of cells from A1 to B2 using the
// CellArea structure
CellArea area = new CellArea();
area.StartRow = 0;
area.StartColumn = 0;
area.EndRow = 1;
area.EndColumn = 1;
ValidationCollection validations = worksheet.getValidations();
// Creating a Validation object
int index = validations.add(area);
Validation validation = validations.get(index);
// Setting the validation type to whole number
validation.setType(ValidationType.WHOLE_NUMBER);
// Setting the operator for validation to Between
validation.setOperator(OperatorType.BETWEEN);
// Setting the minimum value for the validation
validation.setFormula1("10");
// Setting the maximum value for the validation
validation.setFormula2("1000");
// Saving the Excel file
workbook.save(dataDir + "WNDValidation_out.xls");
// Print message
System.out.println("Process completed successfully");

Esempio di programmazione: convalida dati decimali

Con questo tipo di convalida, l’utente può inserire numeri decimali nelle celle convalidate. Nell’esempio, all’utente è vietato inserire solo valori decimali e l’area di convalida è A1:A10.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(DecimalDataValidation.class) + "data/";
// Create a workbook object.
Workbook workbook = new Workbook();
// Create a worksheet and get the first worksheet.
Worksheet ExcelWorkSheet = workbook.getWorksheets().get(0);
// Specify the validation area of cells.
CellArea area = new CellArea();
area.StartRow = 0;
area.StartColumn = 0;
area.EndRow = 9;
area.EndColumn = 0;
// Obtain the existing Validations collection.
ValidationCollection validations = ExcelWorkSheet.getValidations();
// Create a validation object adding to the collection list.
int index = validations.add(area);
Validation validation = validations.get(index);
// Set the validation type.
validation.setType(ValidationType.DECIMAL);
// Specify the operator.
validation.setOperator(OperatorType.BETWEEN);
// Set the lower and upper limits.
validation.setFormula1("10");
validation.setFormula2("1000");
// Set the error message.
validation.setErrorMessage("Please enter a valid integer or decimal number");
// Save the workbook.
workbook.save(dataDir + "DDValidation_out.xls");
// Print message
System.out.println("Process completed successfully");

Esempio di programmazione: convalida dati di elenco

Questo tipo di convalida consente all’utente di inserire valori da un elenco a discesa. Fornisce un elenco: una serie di righe che contengono dati. Gli utenti possono selezionare solo valori dall’elenco. L’area di convalida è l’intervallo di celle A1:A5 nel primo foglio di lavoro.

È importante impostare la proprietà Validation.setInCellDrown su true.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(ListDataValidation.class) + "data/";
// Create a workbook object.
Workbook workbook = new Workbook();
// Get the first worksheet.
Worksheet ExcelWorkSheet = workbook.getWorksheets().get(0);
// Add a new worksheet and access it.
int sheetIndex = workbook.getWorksheets().add();
Worksheet worksheet2 = workbook.getWorksheets().get(sheetIndex);
// Create a range with name in the second worksheet.
Range range = worksheet2.getCells().createRange(0, 4, 4, 4);
range.setName("MyRange");
// Fill different cells with data in the range.
range.get(0, 0).setValue("Blue");
range.get(1, 0).setValue("Red");
range.get(2, 0).setValue("Green");
range.get(3, 0).setValue("Yellow");
// Specify the validation area of cells.
CellArea area = new CellArea();
area.StartRow = 0;
area.StartColumn = 0;
area.EndRow = 4;
area.EndColumn = 0;
// Obtain the existing Validations collection.
ValidationCollection validations = ExcelWorkSheet.getValidations();
// Create a validation object adding to the collection list.
int index = validations.add(area);
Validation validation = validations.get(index);
// Set the validation type.
validation.setType(ValidationType.LIST);
// Set the in cell drop down.
validation.setInCellDropDown(true);
// Set the formula1.
validation.setFormula1("=MyRange");
// Enable it to show error.
validation.setShowError(true);
// Set the alert type severity level.
validation.setAlertStyle(ValidationAlertType.STOP);
// Set the error title.
validation.setErrorTitle("Error");
// Set the error message.
validation.setErrorMessage("Please select a color from the list");
// Save the excel file.
workbook.save(dataDir + "LDValidation_out.xls");
// Print message
System.out.println("Process completed successfully");

Esempio di programmazione: convalida dati di data

Con questo tipo di convalida, gli utenti inseriscono valori di data entro un intervallo specificato, o che soddisfano determinati criteri, nelle celle convalidate. Nell’esempio, all’utente è vietato inserire date comprese tra il 1970 e il 1999. Qui, l’area di convalida è la cella B1.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(DateDataValidation.class) + "data/";
// Create a workbook.
Workbook workbook = new Workbook();
// Obtain the cells of the first worksheet.
Cells cells = workbook.getWorksheets().get(0).getCells();
// Put a string value into the A1 cell.
cells.get("A1").setValue("Please enter Date b/w 1/1/1970 and 12/31/1999");
// Wrap the text.
Style style = cells.get("A1").getStyle();
style.setTextWrapped(true);
cells.get("A1").setStyle(style);
// Set row height and column width for the cells.
cells.setRowHeight(0, 31);
cells.setColumnWidth(0, 35);
// Set a collection of CellArea which contains the data validation
// settings.
CellArea area = new CellArea();
area.StartRow = 0;
area.StartColumn = 1;
area.EndRow = 0;
area.EndColumn = 1;
// Get the validations collection.
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations();
// Add a new validation.
int i = validations.add(area);
Validation validation = validations.get(i);
// Set the data validation type.
validation.setType(ValidationType.DATE);
// Set the operator for the data validation
validation.setOperator(OperatorType.BETWEEN);
// Set the value or expression associated with the data validation.
validation.setFormula1("1/1/1970");
// The value or expression associated with the second part of the data
// validation.
validation.setFormula2("12/31/1999");
// Enable the error.
validation.setShowError(true);
// Set the validation alert style.
validation.setAlertStyle(ValidationAlertType.STOP);
// Set the title of the data-validation error dialog box
validation.setErrorTitle("Date Error");
// Set the data validation error message.
validation.setErrorMessage("Enter a Valid Date");
// Set and enable the data validation input message.
validation.setInputMessage("Date Validation Type");
validation.setIgnoreBlank(true);
validation.setShowInput(true);
// Save the excel file.
workbook.save(dataDir + "DDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003);
// Print message
System.out.println("Process completed successfully");

Esempi di programmazione: convalida dati di ora

Con questo tipo di convalida, gli utenti possono inserire orari entro un intervallo specificato, o soddisfare alcuni criteri, nelle celle convalidate. Nell’esempio, all’utente è vietato inserire orari tra le 09:00 e le 11:30 del mattino. Qui, l’area di convalida è la cella B1.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(TimeDataValidation.class) + "data/";
// Create a workbook.
Workbook workbook = new Workbook();
// Obtain the cells of the first worksheet.
Cells cells = workbook.getWorksheets().get(0).getCells();
// Put a string value into A1 cell.
cells.get("A1").setValue("Please enter Time b/w 09:00 and 11:30 'o Clock");
// Wrap the text.
Style style = cells.get("A1").getStyle();
style.setTextWrapped(true);
cells.get("A1").setStyle(style);
// Set row height and column width for the cells.
cells.setRowHeight(0, 31);
cells.setColumnWidth(0, 35);
// Set a collection of CellArea which contains the data validation
// settings.
CellArea area = new CellArea();
area.StartRow = 0;
area.StartColumn = 1;
area.EndRow = 0;
area.EndColumn = 1;
// Get the validations collection.
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations();
// Add a new validation.
int i = validations.add(area);
Validation validation = validations.get(i);
// Set the data validation type.
validation.setType(ValidationType.TIME);
// Set the operator for the data validation
validation.setOperator(OperatorType.BETWEEN);
// Set the value or expression associated with the data validation.
validation.setFormula1("09:00");
// The value or expression associated with the second part of the data
// validation.
validation.setFormula2("11:30");
// Enable the error.
validation.setShowError(true);
// Set the validation alert style.
validation.setAlertStyle(ValidationAlertType.INFORMATION);
// Set the title of the data-validation error dialog box.
validation.setErrorTitle("Time Error");
// Set the data validation error message.
validation.setErrorMessage("Enter a Valid Time");
// Set and enable the data validation input message.
validation.setInputMessage("Time Validation Type");
validation.setIgnoreBlank(true);
validation.setShowInput(true);
// Save the excel file.
workbook.save(dataDir + "TDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003);
// Print message
System.out.println("Process completed successfully");

Esempi di programmazione: convalida dati di lunghezza del testo

Con questo tipo di convalida, gli utenti possono inserire valori di testo di una lunghezza specificata nelle celle convalidate. Nell’esempio, all’utente è vietato inserire valori di stringa con più di 5 caratteri. L’area di convalida è la cella B1.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(TextLengthDataValidation.class) + "data/";
// Create a new workbook.
Workbook workbook = new Workbook();
// Obtain the cells of the first worksheet.
Cells cells = workbook.getWorksheets().get(0).getCells();
// Put a string value into A1 cell.
cells.get("A1").setValue("Please enter a string not more than 5 chars");
// Wrap the text.
Style style = cells.get("A1").getStyle();
style.setTextWrapped(true);
cells.get("A1").setStyle(style);
// Set row height and column width for the cells.
cells.setRowHeight(0, 31);
cells.setColumnWidth(0, 35);
// Set a collection of CellArea which contains the data validation
// settings.
CellArea area = new CellArea();
area.StartRow = 0;
area.StartColumn = 1;
area.EndRow = 0;
area.EndColumn = 1;
// Get the validations collection.
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations();
// Add a new validation.
int i = validations.add(area);
Validation validation = validations.get(i);
// Set the data validation type.
validation.setType(ValidationType.TEXT_LENGTH);
// Set the operator for the data validation.
validation.setOperator(OperatorType.LESS_OR_EQUAL);
// Set the value or expression associated with the data validation.
validation.setFormula1("5");
// Enable the error.
validation.setShowError(true);
// Set the validation alert style.
validation.setAlertStyle(ValidationAlertType.WARNING);
// Set the title of the data-validation error dialog box.
validation.setErrorTitle("Text Length Error");
// Set the data validation error message.
validation.setErrorMessage(" Enter a Valid String");
// Set and enable the data validation input message.
validation.setInputMessage("TextLength Validation Type");
validation.setIgnoreBlank(true);
validation.setShowInput(true);
// Save the excel file.
workbook.save(dataDir + "TLDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003);
// Print message
System.out.println("Process completed successfully");

Regole di convalida dei dati

Quando le convalide dei dati sono implementate, è possibile controllare la convalida assegnando valori diversi alle celle. Cell.GetValidationValue() può essere utilizzato per ottenere il risultato della convalida. L’esempio seguente dimostra questa funzionalità con valori diversi. Il file di esempio può essere scaricato dal seguente link per il test:

SampleDataValidationRules.xlsx

Codice di Esempio

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// Instantiate the workbook from sample Excel file
Workbook workbook = new Workbook(srcDir + "sampleDataValidationRules.xlsx");
// Access the first worksheet
Worksheet worksheet = workbook.getWorksheets().get(0);
/*
* Access Cell C1. Cell C1 has the Decimal Validation applied on it.It can take only the values Between 10 and 20
*/
Cell cell = worksheet.getCells().get("C1");
// Enter 3 inside this cell. Since it is not between 10 and 20, it should fail the validation
cell.putValue(3);
// Check if number 3 satisfies the Data Validation rule applied on this cell
System.out.println("Is 3 a Valid Value for this Cell: " + cell.getValidationValue());
// Enter 15 inside this cell. Since it is between 10 and 20, it should succeed the validation
cell.putValue(15);
// Check if number 15 satisfies the Data Validation rule applied on this cell
System.out.println("Is 15 a Valid Value for this Cell: " + cell.getValidationValue());
// Enter 30 inside this cell. Since it is not between 10 and 20, it should fail the validation again
cell.putValue(30);
// Check if number 30 satisfies the Data Validation rule applied on this cell
System.out.println("Is 30 a Valid Value for this Cell: " + cell.getValidationValue());
// Enter large number 12345678901 inside this cell
// Since it is not between 1 and 999999999999, it should pass the validation again
Cell cell2 = worksheet.getCells().get("D1");
cell2.putValue(12345678901l);
// Check if number 12345678901 satisfies the Data Validation rule applied on this cell
System.out.println("Is 12345678901 a Valid Value for this Cell: " + cell2.getValidationValue());

Verifica se la convalida in una cella è una selezione a discesa

Come abbiamo visto ci sono molti tipi di convalide che possono essere implementati all’interno di una cella. Se si desidera verificare se la convalida è una selezione a discesa o meno, Validation.InCellDropDown può essere utilizzato per testare questo. Il seguente codice di esempio dimostra l’utilizzo di questa proprietà. Il file di esempio per il test può essere scaricato dal seguente link:

sampleDataValidationRules.xlsx

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
Workbook book = new Workbook(srcDir + "sampleValidation.xlsx");
Worksheet sheet = book.getWorksheets().get("Sheet1");
Cells cells = sheet.getCells();
Cell a2 = cells.get("A2");
Validation va2 = a2.getValidation();
if(va2.getInCellDropDown()) {
System.out.println("A2 is a dropdown");
} else {
System.out.println("A2 is NOT a dropdown");
}
Cell b2 = cells.get("B2");
Validation vb2 = b2.getValidation();
if(vb2.getInCellDropDown()) {
System.out.println("B2 is a dropdown");
} else {
System.out.println("B2 is NOT a dropdown");
}
Cell c2 = cells.get("C2");
Validation vc2 = c2.getValidation();
if(vc2.getInCellDropDown()) {
System.out.println("C2 is a dropdown");
} else {
System.out.println("C2 is NOT a dropdown");
}

Aggiungi CellArea alla convalida esistente

Potrebbero esserci casi in cui potresti voler aggiungere CellArea a Validation esistenti. Quando si aggiunge CellArea usando Validation.AddArea(CellArea cellArea), Aspose.Cells controlla tutte le aree esistenti per vedere se la nuova area esiste già. Se il file ha un gran numero di convalide, ciò influisce sulle prestazioni. Per ovviare a ciò, l’API fornisce il metodo Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge). Il parametro checkIntersection indica se controllare l’intersezione di un’area data con le aree di convalida esistenti. Impostarlo su false disabiliterà il controllo di altre aree. Il parametro checkEdge indica se controllare le aree applicate. Se la nuova area diventa l’area in alto a sinistra, le impostazioni interne vengono ricostruite. Se sei sicuro che la nuova area non sia l’area in alto a sinistra, puoi impostare questo parametro su false.

Lo snippet di codice seguente mostra l’uso del metodo Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) per aggiungere una nuova CellArea a un Validation esistente.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the directories.
String sourceDir = Utils.Get_SourceDirectory();
String outputDir = Utils.Get_OutputDirectory();
Workbook workbook = new Workbook(sourceDir + "ValidationsSample.xlsx");
// Access first worksheet.
Worksheet worksheet = workbook.getWorksheets().get(0);
// Accessing the Validations collection of the worksheet
Validation validation = worksheet.getValidations().get(0);
// Create your cell area.
CellArea cellArea = CellArea.createCellArea("D5", "E7");
// Adding the cell area to Validation
validation.addArea(cellArea, false, false);
// Save the output workbook.
workbook.save(outputDir + "ValidationsSample_out.xlsx");

I file excel sorgente e di output sono allegati a scopo informativo.

File Sorgente

File di Output

Argomenti avanzati