Validazione dati con C++
Tipi ed esecuzione della convalida dei dati
La convalida dei dati è la capacità di impostare regole relative ai dati inseriti in un foglio di lavoro. Ad esempio, utilizzare la convalida per garantire che una colonna denominata DATA contenga solo date, o che un’altra colonna contenga solo numeri. È possibile anche garantire che una colonna denominata DATA contenga solo date entro un determinato intervallo. Con la convalida dei dati è possibile controllare cosa viene inserito nelle celle del foglio di lavoro.
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è 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 decimali.
- I valori sono limitati a un elenco di valori. La convalida dell’elenco 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.
- Un’ora è all’interno di un intervallo specifico.
- Un testo è di una determinata lunghezza di caratteri.
Convalida dei dati con Microsoft Excel
Per creare convalide utilizzando Microsoft Excel:
- In un foglio di lavoro, selezionare le celle a cui si desidera applicare la convalida.
- Dal menu Dati, seleziona Convalida. Verrà visualizzata la finestra di dialogo di convalida.
- Fai clic sulla scheda Impostazioni e inserisci le impostazioni.
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 Worksheet ha una proprietà GetValidations() che rappresenta una raccolta di oggetti Validation. Per impostare la convalida, impostare alcune delle proprietà della classe Validation come segue:
- 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.
Quando le proprietà dell’oggetto Validation sono state configurate, gli sviluppatori possono utilizzare la struttura CellArea per memorizzare informazioni sull’intervallo di celle che verrà convalidato utilizzando la convalida creata.
Tipi di Convalida dei Dati
L’enumerazione ValidationType ha i seguenti membri:
Nome Membr* | Descrizione |
---|---|
AnyValue | Denota un valore di qualsiasi tipo. |
WholeNumber | Denota 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 elenchi a discesa. |
Date | Indica il tipo di convalida per le date. |
Time | Indica il tipo di convalida per l’ora. |
TextLength | Indica il tipo di convalida per la lunghezza del testo. |
Custom | Indica il tipo di convalida personalizzato. |
Convalida dei dati del numero intero
Con questo tipo di convalida, gli utenti possono inserire solo numeri interi entro un intervallo specificato nelle celle convalidare. Gli esempi di codice seguenti mostrano come implementare il tipo di convalida del numero intero. L’esempio crea la stessa convalida dei dati utilizzando Aspose.Cells che abbiamo creato usando Microsoft Excel sopra.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a workbook object
Workbook workbook;
// Create a worksheet and get the first worksheet
Worksheet ExcelWorkSheet = workbook.GetWorksheets().Get(0);
// Accessing the Validations collection of the worksheet
ValidationCollection validations = workbook.GetWorksheets().Get(0).GetValidations();
// Create Cell Area
CellArea ca;
ca.StartRow = 0;
ca.EndRow = 0;
ca.StartColumn = 0;
ca.EndColumn = 0;
// Creating a Validation object
Validation validation = validations.Get(validations.Add(ca));
// Setting the validation type to whole number
validation.SetType(ValidationType::WholeNumber);
// Setting the operator for validation to Between
validation.SetOperator(OperatorType::Between);
// Setting the minimum value for the validation
validation.SetFormula1(u"10");
// Setting the maximum value for the validation
validation.SetFormula2(u"1000");
// Applying the validation to a range of cells from A1 to B2 using the CellArea structure
CellArea area;
area.StartRow = 0;
area.EndRow = 1;
area.StartColumn = 0;
area.EndColumn = 1;
// Adding the cell area to Validation
validation.AddArea(area);
// Save the workbook
workbook.Save(outDir + u"output.out.xls");
std::cout << "Validation applied successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Convalida dei dati della lista
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. Nell’esempio, viene aggiunta un secondo foglio di lavoro per contenere la fonte dell’elenco. Gli utenti possono selezionare solo valori dall’elenco. L’area di convalida è l’intervallo di celle A1:A5 nel primo foglio di lavoro.
È importante qui impostare la proprietà Validation.GetInCellDropDown() su true.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a workbook object
Workbook workbook;
// Get the first worksheet
Worksheet worksheet1 = workbook.GetWorksheets().Get(0);
// Add a new worksheet and access it
int i = workbook.GetWorksheets().Add();
Worksheet worksheet2 = workbook.GetWorksheets().Get(i);
// Create a range in the second worksheet
Range range = worksheet2.GetCells().CreateRange(u"E1", u"E4");
// Name the range
range.SetName(u"MyRange");
// Fill different cells with data in the range
range.Get(0, 0).PutValue(u"Blue");
range.Get(1, 0).PutValue(u"Red");
range.Get(2, 0).PutValue(u"Green");
range.Get(3, 0).PutValue(u"Yellow");
// Get the validations collection
ValidationCollection validations = worksheet1.GetValidations();
// Create Cell Area
CellArea ca;
ca.StartRow = 0;
ca.EndRow = 0;
ca.StartColumn = 0;
ca.EndColumn = 0;
// Create a new validation to the validations list
Validation validation = validations.Get(validations.Add(ca));
// Set the validation type
validation.SetType(ValidationType::List);
// Set the operator
validation.SetOperator(OperatorType::None);
// Set the in cell drop down
validation.SetInCellDropDown(true);
// Set the formula1
validation.SetFormula1(u"=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(u"Error");
// Set the error message
validation.SetErrorMessage(u"Please select a color from the list");
// Specify the validation area
CellArea area;
area.StartRow = 0;
area.EndRow = 4;
area.StartColumn = 0;
area.EndColumn = 0;
// Add the validation area
validation.AddArea(area);
// Save the Excel file
workbook.Save(outDir + u"output.out.xls");
std::cout << "File saved successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Convalida dei dati della 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.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a workbook
Workbook workbook;
// Obtain the cells of the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
Cells cells = worksheet.GetCells();
// Put a string value into the A1 cell
cells.Get(u"A1").PutValue(u"Please enter Date b/w 1/1/1970 and 12/31/1999");
// Set row height and column width for the cells
cells.SetRowHeight(0, 31);
cells.SetColumnWidth(0, 35);
// Get the validations collection
ValidationCollection validations = worksheet.GetValidations();
// Create Cell Area
CellArea ca;
ca.StartRow = 0;
ca.EndRow = 0;
ca.StartColumn = 0;
ca.EndColumn = 0;
// Add a new validation
int32_t validationIndex = validations.Add(ca);
Validation validation = validations.Get(validationIndex);
// 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(u"1/1/1970");
// The value or expression associated with the second part of the data validation
validation.SetFormula2(u"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(u"Date Error");
// Set the data validation error message
validation.SetErrorMessage(u"Enter a Valid Date");
// Set and enable the data validation input message
validation.SetInputMessage(u"Date Validation Type");
validation.SetIgnoreBlank(true);
validation.SetShowInput(true);
// Set a collection of CellArea which contains the data validation settings
CellArea cellArea;
cellArea.StartRow = 0;
cellArea.EndRow = 0;
cellArea.StartColumn = 1;
cellArea.EndColumn = 1;
// Add the validation area
validation.AddArea(cellArea);
// Save the Excel file
U16String outputPath = outDir + u"output.out.xls";
workbook.Save(outputPath);
std::cout << "Excel file saved successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Convalida dei dati dell’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.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a workbook
Workbook workbook;
// Obtain the cells of the first worksheet
Cells cells = workbook.GetWorksheets().Get(0).GetCells();
// Put a string value into A1 cell
cells.Get(u"A1").PutValue(u"Please enter Time b/w 09:00 and 11:30 'o Clock");
// Set the row height and column width for the cells
cells.SetRowHeight(0, 31);
cells.SetColumnWidth(0, 35);
// Get the validations collection
ValidationCollection validations = workbook.GetWorksheets().Get(0).GetValidations();
// Create Cell Area
CellArea ca;
ca.StartRow = 0;
ca.EndRow = 0;
ca.StartColumn = 0;
ca.EndColumn = 0;
// Add a new validation
Validation validation = validations.Get(validations.Add(ca));
// 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(u"09:00");
// The value or expression associated with the second part of the data validation
validation.SetFormula2(u"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(u"Time Error");
// Set the data validation error message
validation.SetErrorMessage(u"Enter a Valid Time");
// Set and enable the data validation input message
validation.SetInputMessage(u"Time Validation Type");
validation.SetIgnoreBlank(true);
validation.SetShowInput(true);
// Set a collection of CellArea which contains the data validation settings
CellArea cellArea;
cellArea.StartRow = 0;
cellArea.EndRow = 0;
cellArea.StartColumn = 1;
cellArea.EndColumn = 1;
// Add the validation area
validation.AddArea(cellArea);
// Save the Excel file
workbook.Save(outDir + u"output.out.xls");
std::cout << "File saved successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
Convalida della 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.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a new workbook
Workbook workbook;
// Obtain the cells of the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
Cells cells = worksheet.GetCells();
// Put a string value into A1 cell
cells.Get(u"A1").PutValue(u"Please enter a string not more than 5 chars");
// Set row height and column width for the cell
cells.SetRowHeight(0, 31);
cells.SetColumnWidth(0, 35);
// Get the validations collection
ValidationCollection validations = worksheet.GetValidations();
// Create Cell Area
CellArea ca;
ca.StartRow = 0;
ca.EndRow = 0;
ca.StartColumn = 0;
ca.EndColumn = 0;
// Add a new validation
int32_t validationIndex = validations.Add(ca);
Validation validation = validations.Get(validationIndex);
// Set the data validation type
validation.SetType(ValidationType::TextLength);
// Set the operator for the data validation
validation.SetOperator(OperatorType::LessOrEqual);
// Set the value or expression associated with the data validation
validation.SetFormula1(u"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(u"Text Length Error");
// Set the data validation error message
validation.SetErrorMessage(u" Enter a Valid String");
// Set and enable the data validation input message
validation.SetInputMessage(u"TextLength Validation Type");
validation.SetIgnoreBlank(true);
validation.SetShowInput(true);
// Set a collection of CellArea which contains the data validation settings
CellArea cellArea;
cellArea.StartRow = 0;
cellArea.EndRow = 0;
cellArea.StartColumn = 1;
cellArea.EndColumn = 1;
// Add the validation area
validation.AddArea(cellArea);
// Save the Excel file
U16String outputPath = outDir + u"output.out.xls";
workbook.Save(outputPath);
std::cout << "File saved successfully: " << outputPath.ToUtf8() << std::endl;
Aspose::Cells::Cleanup();
}
Regole di convalida dei dati
Quando le convalide dei dati sono implementate, la convalida può essere verificata assegnando valori diversi nelle celle. Cell.GetValidationValue può essere utilizzato per ottenere il risultato della convalida. L’esempio seguente illustra questa funzionalità con valori diversi. Il file di esempio può essere scaricato dal seguente link per il test:
sampleDataValidationRules.xlsx
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Path of input Excel file
U16String inputFilePath = srcDir + u"sample.xlsx";
// Create workbook
Workbook workbook(inputFilePath);
// 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(u"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
std::cout << "Is 3 a Valid Value for this Cell: " << cell.GetValidationValue() << std::endl;
// 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
std::cout << "Is 15 a Valid Value for this Cell: " << cell.GetValidationValue() << std::endl;
// 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
std::cout << "Is 30 a Valid Value for this Cell: " << cell.GetValidationValue() << std::endl;
Aspose::Cells::Cleanup();
return 0;
}
Verifica se la convalida nella cella è a discesa
Come abbiamo visto, ci sono molti tipi di convalida che possono essere implementati all’interno di una cella. Se si desidera verificare se la convalida è a discesa o no, può essere utilizzata la proprietà Validation.GetInCellDropDown() per testare questo. Il codice di esempio seguente dimostra l’uso di questa proprietà. Un file di esempio per il testing può essere scaricato dal seguente link:
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Path of input excel file
U16String inputFilePath = srcDir + u"sampleValidation.xlsx";
// Create workbook
Workbook book(inputFilePath);
// Get worksheet
Worksheet sheet = book.GetWorksheets().Get(u"Sheet1");
// Get cells collection
Cells cells = sheet.GetCells();
// Check validation for cell A2
Cell a2 = cells.Get(u"A2");
Validation va2 = a2.GetValidation();
if (va2.GetInCellDropDown())
{
std::cout << "A2 is a dropdown" << std::endl;
}
else
{
std::cout << "A2 is NOT a dropdown" << std::endl;
}
// Check validation for cell B2
Cell b2 = cells.Get(u"B2");
Validation vb2 = b2.GetValidation();
if (vb2.GetInCellDropDown())
{
std::cout << "B2 is a dropdown" << std::endl;
}
else
{
std::cout << "B2 is NOT a dropdown" << std::endl;
}
// Check validation for cell C2
Cell c2 = cells.Get(u"C2");
Validation vc2 = c2.GetValidation();
if (vc2.GetInCellDropDown())
{
std::cout << "C2 is a dropdown" << std::endl;
}
else
{
std::cout << "C2 is NOT a dropdown" << std::endl;
}
Aspose::Cells::Cleanup();
return 0;
}
Aggiungi CellArea alla convalida esistente
Potrebbero esserci casi in cui si desidera aggiungere CellArea a Validation esistenti. Quando si aggiunge CellArea utilizzando Validation.AddArea(CellArea cellArea), Aspose.Cells controlla tutte le aree esistenti per vedere se la nuova area esiste già. Se il file contiene un gran numero di convalide, si verifica un calo delle prestazioni. Per superare questo problema, l’API fornisce il metodo Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge). Il parametro checkIntersection indica se verificare l’intersezione di una data area con le aree di convalida esistenti. Impostarlo su false disabilita la verifica delle altre aree. Il parametro checkEdge indica se verificare le aree applicate. Se la nuova area diventa l’area in alto a sinistra, le impostazioni interne vengono ricostruite. Se si è sicuri che la nuova area non sia l’area in alto a sinistra, è possibile impostare questo parametro su false.
Il seguente frammento di codice dimostra l’uso del metodo Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) per aggiungere nuove CellArea alle Validation esistenti.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source and output directory paths
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Load the workbook
Workbook workbook(srcDir + u"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 cell area
CellArea cellArea = CellArea::CreateCellArea(u"D5", u"E7");
// Adding the cell area to Validation
validation.AddArea(cellArea, false, false);
// Save the output workbook
workbook.Save(outDir + u"ValidationsSample_out.xlsx");
std::cout << "Validation added successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
I file excel sorgente e di output sono allegati a scopo informativo.