Hur man lägger till datavalidering i ett kalkylblad i C++
Aspose.Cells FOSS för C++ stödjer cellnivå datavalideringsregler som begränsar vilka värden användare kan ange i specifika celler eller områden. Validation, ValidationCollection och WorkbookValidator klasserna utgör validerings API.
Steg-för-steg guide
Steg 1: Ställ in bygget
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)Steg 2: Inkludera nödvändiga rubriker
#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;Steg 3: Få åtkomst till valideringssamlingen
Hämta ValidationCollection från kalkylbladet:
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
ValidationCollection& validations = sheet.GetValidations();
return 0;
}Steg 4: Lägg till en valideringsregel
Anropa ValidationCollection::Add() och konfigurera det returnerade Validation-objektet:
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);Steg 5: Tillämpa regeln på ett område
Bifoga valideringen till en CellArea med hjälp av Validation::AddArea:
CellArea area = CellArea::CreateCellArea("B2", "B20");
v.AddArea(area);Steg 6: Spara arbetsboken
workbook.Save("validated.xlsx");
workbook.Dispose();Steg 7: Kör förhandsvalidering före sparning (valfritt)
Anropa WorkbookValidator::ValidateForSave under utveckling för att fånga modellproblem innan sparning:
WorkbookValidator validator;
validator.ValidateForSave(workbook);
workbook.Save("validated.xlsx");Vanliga problem och lösningar
Validering syns inte i sparad fil Ensure Validation::AddArea(area) kallas efter att regeln har konfigurerats. En regel utan tillhörande område serialiseras inte.
Rullgardinslista visas inte Ange v.SetInCellDropDown(true) och ange v.SetType(ValidationType::List) with SetFormula1 pekar på ett intervall eller kommaseparerade värden.
Överlappande valideringsområden Använd ValidationCollection::AreasOverlap för att kontrollera konflikter innan en ny regel läggs till. Överlappande regler kan orsaka oväntat beteende i Excel.
Inmatningsmeddelandet visas inte Säkerställ att båda SetShowInput(true) and SetInputMessage("...") är inställda. En tom meddelandestring undertrycker inmatningsprompten även om SetShowInput(true) kallas.
ValidateForSave rapporterar fel Granska den rapporterade inkonsekvensen. Vanliga orsaker inkluderar saknade formelgränser för valideringar av typ intervall samt ogiltiga cellområdeskoordinater.
Vanliga frågor
Vilka valideringstyper stöds?
Den ValidationType uppräkningen inkluderar: WholeNumber, Decimal, List, Date, TextLength, Custom och Any.
Kan jag ta bort en valideringsregel från ett område?
Ja. Använd ValidationCollection::RemoveArea(area) för att ta bort regeln från ett område, eller RemoveACell(row, col) för en enskild cell.
Kan jag tillämpa samma valideringsregel på flera områden?
Ja. Anropa Validation::AddArea(area) flera gånger på samma Validation-objekt för att tillämpa den på ytterligare områden.
Vilka varningsstilar är tillgängliga?
ValidationAlertType inkluderar: Stop (blockerar ogiltig inmatning), Warning (varnar men tillåter inmatning) och Information (endast informationsverktygstips).
Fungerar validering vid körning, eller bara i Excel?
Datavalideringsregler lagras i XLSX-filen och verkställs av Excel eller en kompatibel läsare. Biblioteket utvärderar inte valideringsbegränsningar vid körning när värden sätts programmässigt.