التحقق من صحة البيانات باستخدام C++
أنواع التحقق من البيانات والتنفيذ
التحقق من البيانات هو القدرة على وضع قواعد تتعلق بالبيانات المُدخلة على ورقة العمل. على سبيل المثال، استخدم التحقق لضمان أن العمود المسمى تاريخ يحتوي فقط على تواريخ، أو أن عمودًا آخر يحتوي فقط على أرقام. يمكنك حتى التأكد من أن العمود المسمى تاريخ يحتوي فقط على تواريخ ضمن نطاق معين. باستخدام التحقق من البيانات، يمكنك التحكم في ما يُدخل في الخلايا في ورقة العمل.
يدعم Microsoft Excel عددًا من أنواع التحقق المختلفة للبيانات. يُستخدم كل نوع للتحكم في نوع البيانات التي تُدخل إلى خلية أو نطاق الخلايا. أدناه، مقتطفات الكود توضح كيفية التحقق من:
- أن الأرقام صحيحة، أي أن ليس لديها جزء عشري.
- أن الأرقام العشرية تتبع الهيكل الصحيح. يحدد مثال الكود أن يكون نطاق الخلايا يجب أن يحتوي على اثنين من أماكن العشرية.
- أن القيم مقيدة بقائمة من القيم. يحدد التحقق بالقائمة قائمة منفصلة من القيم التي يمكن تطبيقها على خلية أو نطاق الخلايا.
- يتمثل التواريخ ضمن نطاق محدد.
- أن الوقت يكون ضمن نطاق محدد.
- أن النص يكون ضمن طول حرف معين.
التحقق من البيانات مع Microsoft Excel
لإنشاء التحققات باستخدام Microsoft Excel:
- في ورقة العمل، حدد الخلايا التي ترغب في تطبيق التحقق عليها.
- من قائمة البيانات، حدد التحقق. سيتم عرض حوار التحقق.
- انقر على علامة التبويب الإعدادات ثم أدخل الإعدادات.
التحقق من البيانات بواسطة Aspose.Cells
التحقق من البيانات هو ميزة قوية للتحقق من المعلومات المُدخلة في أوراق العمل. باستخدام التحقق من البيانات، يمكن للمطورين توفير للمستخدمين قائمة من الخيارات، وتقييد إدخالات البيانات إلى نوع معين أو حجم، الخ. في Aspose.Cells، لكل فئة Worksheet خاصية GetValidations() التي تمثل مجموعة من كائنات Validation. لإعداد التحقق، قم بتعيين بعض خصائص فئة Validation كما يلي:
- النوع - يمثل نوع التحقق، والذي يمكن تحديده باستخدام قيم محددة مُسبقًا في تعداد ValidationType.
- المشغل – يمثل المشغل الذي سيتم استخدامه في التحقق، والذي يمكن تحديده باستخدام أحد القيم المحددة في التعداد OperatorType .
- الصيغة1 - يمثل القيمة أو التعبير المرتبط بالجزء الأول من التحقق من البيانات.
- الصيغة2 - يمثل القيمة أو التعبير المرتبط بالجزء الثاني من التحقق من البيانات.
عند تكوين خصائص كائن Validation ، يمكن للمطورين استخدام هيكل CellArea لتخزين المعلومات حول نطاق الخلايا الذي سيتم التحقق من صحته باستخدام التحقق من البيانات الذي تم إنشاؤه.
أنواع التحقق من البيانات
يحتوي تعداد ValidationType على الأعضاء التالية:
اسم العضو | الوصف |
---|---|
AnyValue | يُشير إلى قيمة من أي نوع. |
WholeNumber | تشير إلى نوع التحقق من صحة للأرقام الكاملة. |
Decimal | تشير إلى نوع التحقق من صحة للأرقام العشرية. |
List | تشير إلى نوع التحقق من صحة لقائمة السقط. |
Date | تشير إلى نوع التحقق من صحة للتواريخ. |
Time | تشير إلى نوع التحقق من صحة للوقت. |
TextLength | تشير إلى نوع التحقق من صحة لطول النص. |
Custom | تشير إلى نوع التحقق من العرف. |
تحقق البيانات من الأعداد الصحيحة
مع هذا النوع من التحقق، يمكن للمستخدمين إدخال الأرقام الكاملة فقط ضمن نطاق محدد إلى الخلايا المحققة. توضح أمثلة الشيفرة التالية كيفية تنفيذ نوع التحقق من الأرقام الكاملة. يقوم المثال بإنشاء التحقق من البيانات نفسه باستخدام Aspose.Cells الذي قمنا بإنشائه باستخدام Microsoft Excel أعلاه.
#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();
}
تحقق البيانات من القائمة
يسمح هذا النوع من التحقق للمستخدم بإدخال قيم من قائمة منسدلة. يوفر قائمة: سلسلة من الصفوف التي تحتوي على بيانات. في المثال، يتم إضافة ورقة عمل ثانية لاحتواء مصدر القائمة. يمكن للمستخدمين فقط تحديد القيم من القائمة. منطقة التحقق هي نطاق الخلية A1:A5 في الورقة العمل الأولى.
من المهم هنا تعيين Validation.GetInCellDropDown() إلى 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();
}
تحقق البيانات من التاريخ
مع هذا النوع من التحقق، يقوم المستخدمون بإدخال قيم تاريخية ضمن النطاق المحدد، أو تلبية معايير محددة، داخل الخلايا المحققة. في المثال، يتم تقييد المستخدم لإدخال تواريخ بين 1970 و1999. هنا، منطقة التحقق هي خلية 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();
}
تحقق المواقيت الزمنية للبيانات
مع هذا النوع من التحقق، يمكن للمستخدمين إدخال أوقات ضمن نطاق محدد، أو تلبية بعض المعايير، في الخلايا الموجودة. ففي المثال، يتم تقييد المستخدم بإدخال الأوقات بين الساعة 09:00 و11:30 صباحًا. هنا، مجال التحقق هو خلية 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();
}
تحقق طول النصوص للبيانات
مع هذا النوع من التحقق، يمكن للمستخدمين إدخال قيم نصية من طول محدد في الخلايا الموجودة. في المثال، يتم تقييد المستخدم بإدخال قيم سلسلة نصية بأكثر من 5 أحرف. مجال التحقق هو الخلية 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();
}
قواعد تحقق البيانات
عندما يتم تنفيذ تحققات البيانات، يمكن فحص التحقق بتعيين قيم مختلفة في الخلايا. يمكن استخدام Cell.GetValidationValue لاسترداد نتيجة التحقق. يوضح المثال التالي هذه الميزة مع قيم مختلفة. يمكن تنزيل الملف العيني من الرابط التالي للاختبار:
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;
}
التحقق مما إذا كان التحقق في الخلية القائمة المنسدلة
كما رأينا، هناك العديد من أنواع التحقق التي يمكن تنفيذها داخل خلية. إذا أردت التحقق ما إذا كان التحقق منسدلة أم لا، يمكن استخدام Validation.GetInCellDropDown() خاصية لاختبار هذا. يوضح الكود العيني التالي استخدام هذه الخاصية. يمكن تنزيل ملف عينة للفحص من الرابط التالي:
#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 إلى Validation القائمة بالفعل. عندما تضيف CellArea باستخدام Validation.AddArea(CellArea cellArea)، يقوم Aspose.Cells بفحص جميع المناطق القائمة لمعرفة ما إذا كانت المنطقة الجديدة موجودة بالفعل. إذا كان للملف عدد كبير من التحققات، فإن هذا يؤثر على الأداء. للتغلب على هذا، يوفر الواجهة البرمجية الطريقة Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) . يشير معلم checkIntersection إلى ما إذا كان يجب فحص اشتراك منطقة معينة مع مناطق التحقق القائمة. تعيينها على false سيعطل فحص المناطق الأخرى. معلم checkEdge يشير إلى ما إذا كان يجب فحص المناطق المطبقة. إذا أصبحت المنطقة الجديدة هي المنطقة العلوية اليسرى، يتم إعادة إعدادات الداخلية. إذا كنت متأكدًا من أن المنطقة الجديدة ليست المنطقة العلوية اليسرى، فيمكنك ضبط هذا المعلم على false.
الكود البرمجي التالي يوضح استخدام الطريقة Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) لإضافة CellArea جديدة إلى 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();
}
الملفات الإكسل المصدر والناتج مرفقة للرجوع إليها.