Datenvalidierung mit C++
Datenvalidierungstypen und Ausführung
Datenvalidierung ermöglicht das Festlegen von Regeln für auf einem Arbeitsblatt eingegebene Daten. Verwenden Sie beispielsweise Validierungen, um sicherzustellen, dass eine Spalte mit der Bezeichnung DATUM nur Datumsangaben enthält oder dass eine andere Spalte nur Zahlen enthält. Sie könnten sogar sicherstellen, dass eine Spalte mit der Bezeichnung DATUM nur Daten innerhalb eines bestimmten Bereichs enthält. Mit Datenvalidierungen können Sie steuern, was in Zellen im Arbeitsblatt eingegeben wird.
Microsoft Excel unterstützt verschiedene Arten von Datenvalidierungen. Jede Art wird verwendet, um zu steuern, welche Art von Daten in eine Zelle oder Zellbereich eingegeben wird. Nachfolgend werden Codeausschnitte illustriert, wie überprüft wird, dass:
- Zahlen ganzzahlig sind, d.h. keine Dezimalstellen haben.
- Dezimalzahlen die richtige Struktur aufweisen. Das Codebeispiel definiert, dass ein Zellbereich zwei Dezimalstellen haben sollte.
- Werte auf eine Liste von Werten beschränkt sind. Die Listenvalidierung definiert eine separate Liste von Werten, die auf eine Zelle oder einen Zellbereich angewendet werden können.
- Daten innerhalb eines bestimmten Bereichs liegen.
- Eine Uhrzeit innerhalb eines bestimmten Bereichs liegt.
- Ein Text eine bestimmte Zeichenlänge aufweist.
Datenvalidierung mit Microsoft Excel
Um Validierungen mit Microsoft Excel zu erstellen:
- Wählen Sie in einem Arbeitsblatt die Zellen aus, auf die Sie die Überprüfung anwenden möchten.
- Wählen Sie im Daten-Menü Validierung aus. Der Validierungsdialog wird angezeigt.
- Klicken Sie auf die Registerkarte Einstellungen und geben Sie die Einstellungen ein.
Datumsvalidierung mit Aspose.Cells
Die Datenvalidierung ist eine leistungsstarke Funktion zur Überprüfung der in Arbeitsblätter eingegebenen Informationen. Mit der Datenvalidierung können Entwickler Benutzern eine Auswahlliste bereitstellen, Daten eingaben auf einen bestimmten Typ oder eine bestimmte Größe beschränken usw. In Aspose.Cells hat jede Worksheet-Klasse eine GetValidations()-Eigenschaft, die eine Sammlung von Validation-Objekten darstellt. Um die Validierung einzurichten, setzen Sie einige der Eigenschaften der Validation-Klasse wie folgt:
- Typ – stellt den Validierungstyp dar, der durch Verwendung einer der vordefinierten Werte in der ValidationType-Aufzählung angegeben werden kann.
- Operator – stellt den Operator dar, der bei der Validierung verwendet werden soll und durch Verwendung eines der vordefinierten Werte in der OperatorType-Aufzählung angegeben werden kann.
- Formel1 – stellt den Wert oder den Ausdruck dar, der mit dem ersten Teil der Datenvalidierung verbunden ist.
- Formel2 – repräsentiert den Wert oder Ausdruck, der mit dem zweiten Teil der Datenvalidierung verbunden ist.
Wenn die Eigenschaften des Validation-Objekts konfiguriert wurden, können Entwickler die CellArea-Struktur verwenden, um Informationen über den Zellenbereich zu speichern, der mithilfe der erstellten Validierung überprüft wird.
Arten der Datenvalidierung
Die ValidationType-Aufzählung hat die folgenden Elemente:
Member Name | Description |
---|---|
AnyValue | Bezeichnet einen Wert jedes Typs. |
WholeNumber | Bezeichnet den Validierungstyp für ganze Zahlen. |
Decimal | Bezeichnet den Validierungstyp für Dezimalzahlen. |
List | Bezeichnet den Validierungstyp für Dropdown-Liste. |
Date | Bezeichnet den Validierungstyp für Datum. |
Time | Bezeichnet den Validierungstyp für Uhrzeit. |
TextLength | Bezeichnet den Validierungstyp für die Länge des Textes. |
Custom | Bezeichnet benutzerdefinierten Validierungstyp. |
Ganze Zahl Datenvalidierung
Mit diesem Validierungstyp können Benutzer nur ganze Zahlen innerhalb eines festgelegten Bereichs in die validierten Zellen eingeben. Die nachfolgenden Codebeispiele zeigen, wie der Validierungstyp Ganzzahl implementiert wird. Das Beispiel erstellt dieselbe Datenvalidierung mit Aspose.Cells, die wir oben mithilfe von Microsoft Excel erstellt haben.
#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();
}
Listendatenvalidierung
Bei dieser Art der Validierung kann der Benutzer Werte aus einer Dropdown-Liste eingeben. Es bietet eine Liste: eine Reihe von Zeilen, die Daten enthalten. Im Beispiel wird ein zweites Arbeitsblatt hinzugefügt, um die Listenquelle zu speichern. Benutzer können nur Werte aus der Liste auswählen. Der Gültigkeitsbereich ist der Zellenbereich A1:A5 im ersten Arbeitsblatt.
Es ist wichtig, dass Sie die Validation.GetInCellDropDown()-Eigenschaft auf true setzen.
#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();
}
Datum Datenvalidierung
Bei diesem Validierungstyp gibt der Benutzer Datumswerte innerhalb eines bestimmten Bereichs oder gemäß bestimmten Kriterien in die validierten Zellen ein. Im Beispiel ist der Benutzer darauf beschränkt, Daten zwischen 1970 und 1999 einzugeben. Der Gültigkeitsbereich ist die Zelle 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();
}
Zeit Datenvalidierung
Bei diesem Typ der Validierung können Benutzer Zeiten innerhalb eines bestimmten Bereichs oder gemäß bestimmter Kriterien in die validierten Zellen eingeben. Im Beispiel ist der Benutzer darauf beschränkt, Zeiten zwischen 09:00 und 11:30 Uhr einzugeben. Der Gültigkeitsbereich ist die Zelle 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();
}
Textlängendatenvalidierung
Bei diesem Validierungstyp können Benutzer Textwerte einer bestimmten Länge in die validierten Zellen eingeben. Im Beispiel ist der Benutzer darauf beschränkt, Zeichenfolgenwerte mit nicht mehr als 5 Zeichen einzugeben. Der Gültigkeitsbereich ist die Zelle 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();
}
Datenvalidierungsregeln
Wenn Datenvalidierungen implementiert sind, kann die Validierung überprüft werden, indem verschiedene Werte den Zellen zugewiesen werden. Cell.GetValidationValue kann verwendet werden, um das Validierungsergebnis zu erhalten. Das folgende Beispiel zeigt diese Funktion mit verschiedenen Werten. Die Beispieldatei kann über den folgenden Link heruntergeladen werden, um getestet zu werden:
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;
}
Überprüfen Sie, ob die Validierung in der Zelle ein Dropdown ist
Wie wir gesehen haben, gibt es viele Arten von Validierungen, die innerhalb einer Zelle implementiert werden können. Wenn Sie überprüfen möchten, ob die Validierung ein Dropdown ist oder nicht, kann die Eigenschaft Validation.GetInCellDropDown() verwendet werden, um dies zu testen. Der folgende Beispielcode demonstriert die Verwendung dieser Eigenschaft. Eine Beispieldatei für Tests kann über den folgenden Link heruntergeladen werden:
#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;
}
CellArea zur vorhandenen Validierung hinzufügen
Es gibt möglicherweise Fälle, in denen Sie CellArea zu vorhandenem Validation hinzufügen möchten. Wenn Sie CellArea mit Validation.AddArea(CellArea cellArea) hinzufügen, überprüft Aspose.Cells alle vorhandenen Bereiche, um zu sehen, ob der neue Bereich bereits existiert. Wenn die Datei eine große Anzahl von Validierungen enthält, wirkt sich dies negativ auf die Leistung aus. Um dies zu überwinden, bietet die API die Methode Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) an. Der Parameter checkIntersection gibt an, ob der Schnittpunkt eines bestimmten Bereichs mit vorhandenen Validierungsbereichen überprüft werden soll. Wenn Sie ihn auf false setzen, wird die Überprüfung anderer Bereiche deaktiviert. Der Parameter checkEdge gibt an, ob die angewendeten Bereiche überprüft werden sollen. Wenn der neue Bereich der obere linke Bereich wird, werden interne Einstellungen neu erstellt. Wenn Sie sicher sind, dass der neue Bereich nicht der obere linke Bereich ist, können Sie diesen Parameter auf false setzen.
Der folgende Code-Ausschnitt zeigt die Verwendung der Methode Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) zum Hinzufügen neuer CellArea zu vorhandenem Validation.
#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();
}
Die Quell- und Ausgabedateien sind als Referenz angehängt.