Как добавить проверку данных в электронную таблицу на C++
Aspose.Cells FOSS для C++ поддерживает правила проверки данных на уровне ячеек, которые ограничивают значения, которые пользователи могут вводить в конкретных ячейках или диапазонах. Классы Validation, ValidationCollection и WorkbookValidator образуют API проверки.
Пошаговое руководство
Шаг 1: Настройте сборку
cmake_minimum_required(VERSION 3.15)
project(DataValidation CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(DataValidation main.cpp)
target_link_libraries(DataValidation PRIVATE Aspose.Cells.Foss.Cpp)Шаг 2: Подключите необходимые заголовки
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/ValidationCollection.h"
#include "aspose/cells_foss/Validation.h"
#include "aspose/cells_foss/CellArea.h"
using namespace Aspose::Cells_FOSS;Шаг 3: Доступ к коллекции проверок
Получите ValidationCollection из рабочего листа:
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
ValidationCollection& validations = sheet.GetValidations();
return 0;
}Шаг 4: Добавить правило проверки
Вызовите ValidationCollection::Add() и настройте возвращённый объект Validation:
int idx = validations.Add();
Validation& v = validations[idx];
v.SetType(ValidationType::WholeNumber);
v.SetFormula1("1");
v.SetFormula2("100");
v.SetIgnoreBlank(true);
v.SetInputTitle("Enter Quantity");
v.SetInputMessage("Enter a whole number between 1 and 100.");
v.SetErrorTitle("Invalid Input");
v.SetErrorMessage("Value must be between 1 and 100.");
v.SetShowInput(true);
v.SetShowError(true);
v.SetAlertStyle(ValidationAlertType::Stop);Шаг 5: Применить правило к диапазону
Привяжите проверку к CellArea с помощью Validation::AddArea:
CellArea area = CellArea::CreateCellArea("B2", "B20");
v.AddArea(area);Шаг 6: Сохранить книгу
workbook.Save("validated.xlsx");
workbook.Dispose();Шаг 7: Запустить проверку перед сохранением (необязательно)
Вызовите WorkbookValidator::ValidateForSave во время разработки, чтобы обнаружить проблемы модели до сохранения:
WorkbookValidator validator;
validator.ValidateForSave(workbook);
workbook.Save("validated.xlsx");Распространённые проблемы и решения
Пvalidation not visible in saved file Ensure Validation::AddArea(area) вызывается после настройки правила. Правило без связанной области не сериализуется.
Выпадающий список не отображается Установить v.SetInCellDropDown(true) и установить v.SetType(ValidationType::List) with SetFormula1 указывающий на диапазон или значения, разделённые запятыми.
Перекрывающиеся области проверки Использовать ValidationCollection::AreasOverlap для проверки конфликтов перед добавлением нового правила. Перекрывающиеся правила могут вызывать непредвиденное поведение в Excel.
Сообщение ввода не отображается Убедитесь, что оба SetShowInput(true) and SetInputMessage("...") установлены. Пустая строка сообщения подавляет запрос ввода, даже если SetShowInput(true) вызывается.
ValidateForSave сообщает об ошибках Проверьте сообщённое несоответствие. Частыми причинами являются отсутствие границ формулы для проверок типа диапазон и неверные координаты области ячеек.
Часто задаваемые вопросы
Какие типы проверки поддерживаются?
Перечисление ValidationType включает: WholeNumber, Decimal, List, Date, TextLength, Custom и Any.
Могу ли я удалить правило проверки из диапазона?
Да. Используйте ValidationCollection::RemoveArea(area), чтобы удалить правило из диапазона, или RemoveACell(row, col) для отдельной ячейки.
Могу ли я применить то же правило проверки к нескольким диапазонам?
Да. Вызовите Validation::AddArea(area) несколько раз на том же объекте Validation, чтобы применить его к дополнительным диапазонам.
Какие стили оповещений доступны?
ValidationAlertType включает: Stop (блокирует недопустимый ввод), Warning (выдаёт предупреждение, но позволяет ввод), и Information (только информационная подсказка).
Работает ли проверка во время выполнения или только в Excel?
Правила проверки данных хранятся в файле XLSX и применяются Excel или совместимым средством чтения. Библиотека не оценивает ограничения проверки во время выполнения, когда значения задаются программно.