Arbeiten mit Datenvalidierung
Arbeiten mit Datenvalidierung
Aspose.Cells FOSS for C++ unterstützt das Hinzufügen von zellbasierten Datenvalidierungsregeln zu Arbeitsblättern über die Klassen Validation und ValidationCollection. Die Klasse WorkbookValidator bietet eine Konsistenzprüfung vor dem Speichern.
Hinzufügen einer Validierungsregel
Greifen Sie auf die Validierungssammlung eines Arbeitsblatts zu und fügen Sie eine neue Regel mit ValidationCollection::Add() hinzu. Legen Sie Typ, Formel und Zielbereich im zurückgegebenen Validation-Objekt fest:
#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;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
ValidationCollection& validations = sheet.GetValidations();
int idx = validations.Add();
Validation& v = validations[idx];
v.SetType(ValidationType::WholeNumber);
v.SetFormula1("1");
v.SetFormula2("100");
v.SetIgnoreBlank(true);
v.SetInCellDropDown(false);
v.SetInputTitle("Enter Value");
v.SetInputMessage("Value must be between 1 and 100.");
v.SetErrorTitle("Invalid Input");
v.SetErrorMessage("Value is out of range.");
v.SetShowInput(true);
v.SetShowError(true);
CellArea area = CellArea::CreateCellArea("B2", "B10");
v.AddArea(area);
workbook.Save("validated.xlsx");
return 0;
}Validierungstypen
Die Aufzählung ValidationType definiert die Arten von Einschränkungen, die angewendet werden können:
| ValidationType | Beschreibung |
|---|---|
WholeNumber | Ganzzahlwertbeschränkung |
Decimal | Gleitkomma-Beschränkung |
List | Dropdown-Liste aus einer Formel oder einem Bereich |
Date | Datumswertbeschränkung |
TextLength | String-Längenbeschränkung |
Custom | Formelbasierte benutzerdefinierte Regel |
Warnstil
Die ValidationAlertType-Aufzählung steuert das Verhalten, das angezeigt wird, wenn die Validierung fehlschlägt:
| AlertStyle | Behavior |
|---|---|
Stop | Blockiert die Eingabe und zeigt einen Fehlermeldungsdialog an |
Warning | Zeigt eine Warnung; der Benutzer kann akzeptieren oder ablehnen |
Information | Zeigt einen Informationstooltip |
Legen Sie den Alarmstil mit Validation::SetAlertStyle(ValidationAlertType) fest.
Abfrage der Validierung in einer Zelle
Verwenden Sie ValidationCollection::GetValidationInCell(row, col), um herauszufinden, welche Validierungsregel auf eine bestimmte Zelle zutrifft. Gibt nullptr zurück, wenn keine Regel zutrifft.
Entfernen von Validierungsregeln
Entfernen Sie eine Validierung aus einer bestimmten Zelle oder einem Zellbereich:
CellArea area = CellArea::CreateCellArea("B2", "B10");
validations.RemoveArea(area);
// Or remove a single cell:
validations.RemoveACell(1, 1); // row=1, col=1 (0-based)
Validierung der Arbeitsmappe vor dem Speichern
Rufen Sie WorkbookValidator::ValidateForSave auf, um vor dem Speichern eine Konsistenzprüfung des Arbeitsmappenmodells durchzuführen. Dies wird automatisch von Workbook::Save aufgerufen, kann jedoch während der Entwicklung unabhängig ausgelöst werden:
WorkbookValidator validator;
validator.ValidateForSave(workbook);Tipps und bewährte Verfahren
- Setzen Sie immer sowohl
SetFormula1als auchSetFormula2für bereichsbasierte Validierungen (WholeNumber,Decimal,Date) fest, um die unteren und oberen Grenzen zu definieren. - Verwenden Sie
SetIgnoreBlank(true), um leere Zellen die Validierung passieren zu lassen, ohne einen Fehler auszulösen. - Rufen Sie
ValidationCollection::AreasOverlapauf, bevor Sie eine neue Regel hinzufügen, um überlappende Validierungsbereiche im selben Blatt zu prüfen. WorkbookValidator::ValidateForSavewird beim Speichern intern aufgerufen; rufen Sie es während der Entwicklung auf, um Probleme frühzeitig zu erkennen.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Validierung nicht auf Zelle angewendet | Bereich nicht hinzugefügt | Rufe Validation::AddArea(area) mit dem Zielbereich auf |
| Dropdown wird nicht angezeigt | SetInCellDropDown(false) | Setze SetInCellDropDown(true) für Listenvalidierungen |
| Regeln überschneiden sich | Zwei Regeln decken dieselben Zellen ab | Verwenden Sie AreasOverlap, um Konflikte zu erkennen und zu lösen |
| ValidateForSave schlägt fehl | Modellinkonsistenz | Überprüfen Sie die gemeldete Inkonsistenz und beheben Sie sie, bevor Sie speichern |
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
ValidationCollection::Add() | Eine neue leere Validierungsregel hinzufügen |
ValidationCollection::GetValidationInCell(row, col) | Validierung für eine Zelle finden |
ValidationCollection::RemoveArea(area) | Validierung aus einem Bereich entfernen |
ValidationCollection::RemoveACell(row, col) | Validierung aus einer Zelle entfernen |
ValidationCollection::AreasOverlap | Auf überlappende Validierungsbereiche prüfen |
Validation::SetType(ValidationType) | Setze den Validierungstyp |
Validation::SetFormula1(expr) | Untergrenze festlegen oder Listenquelle |
Validation::SetFormula2(expr) | Obere Grenze festlegen |
Validation::AddArea(area) | Regel auf einen Bereich anwenden |
Validation::RemoveArea(area) | Entferne die Regel aus einem Bereich |
Validation::SetAlertStyle(style) | Stop-/Warn-/Informationsverhalten festlegen |
WorkbookValidator::ValidateForSave | Vorab-Konsistenzprüfung |