Lavorare con la convalida dei dati
Lavorare con la convalida dei dati
Aspose.Cells FOSS for C++ supporta l’aggiunta di regole di convalida dei dati a livello di cella ai fogli di lavoro tramite le classi Validation e ValidationCollection. La classe WorkbookValidator fornisce un controllo di coerenza prima del salvataggio.
Aggiungere una regola di convalida
Accedi alla raccolta di convalida di un foglio di lavoro e aggiungi una nuova regola usando ValidationCollection::Add(). Imposta il tipo, la formula e l’area di destinazione sull’oggetto Validation restituito:
#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;
}Tipi di convalida
L’enumerazione ValidationType definisce i tipi di vincoli che possono essere applicati:
| ValidationType | Descrizione |
|---|---|
WholeNumber | Vincolo di valore intero |
Decimal | Vincolo a virgola mobile |
List | Elenco a discesa da una formula o intervallo |
Date | Vincolo di valore data |
TextLength | Vincolo di lunghezza della stringa |
Custom | Regola personalizzata basata su formula |
Stile di avviso
L’enumerazione ValidationAlertType controlla il comportamento mostrato quando la convalida fallisce:
| AlertStyle | Behavior |
|---|---|
Stop | Blocca l’immissione e mostra una finestra di errore |
Warning | Mostra un avviso; l’utente può accettare o rifiutare |
Information | Mostra un tooltip informativo |
Imposta lo stile di avviso con Validation::SetAlertStyle(ValidationAlertType).
Interrogare la convalida in una cella
Usa ValidationCollection::GetValidationInCell(row, col) per trovare quale regola di convalida si applica a una cella specifica. Restituisce nullptr se nessuna regola si applica.
Rimozione delle regole di convalida
Rimuovi una convalida da una cella o area di intervallo specifica:
CellArea area = CellArea::CreateCellArea("B2", "B10");
validations.RemoveArea(area);
// Or remove a single cell:
validations.RemoveACell(1, 1); // row=1, col=1 (0-based)
Convalida della cartella di lavoro prima del salvataggio
Chiama WorkbookValidator::ValidateForSave per eseguire un controllo di coerenza sul modello della cartella di lavoro prima del salvataggio. Questo viene chiamato automaticamente da Workbook::Save ma può essere invocato indipendentemente durante lo sviluppo:
WorkbookValidator validator;
validator.ValidateForSave(workbook);Suggerimenti e migliori pratiche
- Imposta sempre sia
SetFormula1siaSetFormula2per le convalide di tipo intervallo (WholeNumber,Decimal,Date) per definire i limiti inferiore e superiore. - Usa
SetIgnoreBlank(true)per consentire alle celle vuote di superare la convalida senza generare un errore. - Chiama
ValidationCollection::AreasOverlapprima di aggiungere una nuova regola per verificare la presenza di aree di convalida sovrapposte nello stesso foglio. WorkbookValidator::ValidateForSaveviene chiamato internamente al salvataggio; invocalo durante lo sviluppo per rilevare i problemi in anticipo.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
| Validazione non applicata alla cella | Area non aggiunta | Chiama Validation::AddArea(area) con l’intervallo di destinazione |
| Menu a discesa non visualizzato | SetInCellDropDown(false) | Imposta SetInCellDropDown(true) per le convalide della lista |
| Le regole si sovrappongono | Due regole coprono le stesse celle | Usa AreasOverlap per rilevare e risolvere i conflitti |
| ValidateForSave fallisce | Incoerenza del modello | Rivedi e correggi l’incoerenza segnalata prima di salvare |
Riepilogo API Reference
| Classe/Metodo | Descrizione |
|---|---|
ValidationCollection::Add() | Aggiungi una nuova regola di convalida vuota |
ValidationCollection::GetValidationInCell(row, col) | Trova la convalida per una cella |
ValidationCollection::RemoveArea(area) | Rimuovi la convalida da un intervallo |
ValidationCollection::RemoveACell(row, col) | Rimuovi la convalida da una cella |
ValidationCollection::AreasOverlap | Verifica la presenza di aree di convalida sovrapposte |
Validation::SetType(ValidationType) | Imposta il tipo di convalida |
Validation::SetFormula1(expr) | Imposta il limite inferiore o l’origine dell’elenco |
Validation::SetFormula2(expr) | Imposta limite superiore |
Validation::AddArea(area) | Applica la regola a un intervallo |
Validation::RemoveArea(area) | Rimuovi la regola da un intervallo |
Validation::SetAlertStyle(style) | Imposta il comportamento di interruzione/avviso/informazione |
WorkbookValidator::ValidateForSave | Verifica di coerenza pre-salvataggio |