Validación de datos

Tipos de Validación de Datos y Ejecución

La validación de datos es la capacidad de establecer reglas relacionadas con los datos ingresados en una hoja de cálculo. Por ejemplo, use la validación para asegurarse de que una columna etiquetada como FECHA contenga solo fechas, o que otra columna contenga solo números. Incluso puede asegurarse de que una columna etiquetada como FECHA contenga solo fechas dentro de un cierto rango. Con la validación de datos, puede controlar lo que se ingresa en las celdas de la hoja de cálculo.

Microsoft Excel admite varios tipos diferentes de validación de datos. Cada tipo se usa para controlar qué tipo de datos se ingresa en una celda o rango de celdas. A continuación, se muestran fragmentos de código que ilustran cómo validar que:

  • Los números son enteros, es decir, que no tienen parte decimal.
  • Los números decimales siguen la estructura correcta. El ejemplo de código define que un rango de celdas debe tener dos espacios decimales.
  • Los valores están restringidos a una lista de valores. La validación de lista define una lista separada de valores que se pueden aplicar a una celda o rango de celdas.
  • Las fechas se encuentran dentro de un rango específico.
  • Una hora está dentro de un rango específico.
  • Un texto está dentro de una longitud de caracteres dada.

Validación de datos con Microsoft Excel

Para crear validaciones usando Microsoft Excel:

  1. En una hoja de cálculo, seleccione las celdas a las que desea aplicar la validación.
  2. Desde el menú Datos, seleccione Validación. Se mostrará el diálogo de validación.
  3. Haga clic en la pestaña Configuración e ingrese la configuración.

Validación de Datos con Aspose.Cells for Node.js via C++

La validación de datos es una función poderosa para validar la información ingresada en las hojas de cálculo. Con la validación de datos, los desarrolladores pueden proporcionar a los usuarios una lista de opciones, restringir las entradas de datos a un tipo o tamaño específico, etc.
En Aspose.Cells for Node.js via C++, cada clase Worksheet tiene un método getValidations() que representa una colección de objetos Validation. Para configurar la validación, establece algunas propiedades de la clase Validation como sigue:

  • Tipo – representa el tipo de validación, que puede especificarse usando uno de los valores predefinidos en la enumeración ValidationType.
  • Operador – representa el operador que se usará en la validación, que puede especificarse usando uno de los valores predefinidos en la enumeración OperatorType.
  • Fórmula1 – representa el valor o expresión asociado con la primera parte de la validación de datos.
  • Fórmula2 – representa el valor o expresión asociado con la segunda parte de la validación de datos.

Cuando las propiedades del objeto Validation hayan sido configuradas, los desarrolladores pueden usar la estructura CellArea para almacenar información sobre el rango de celdas que será validado usando la validación creada.

Tipos de validación de datos

La enumeración ValidationType tiene los siguientes miembros:

Nombre del miembro Descripción
AnyValue Denota un valor de cualquier tipo.
WholeNumber Denota tipo de validación para números enteros.
Decimal Denota tipo de validación para números decimales.
List Denota tipo de validación para lista desplegable.
Date Denota tipo de validación para fechas.
Time Denota tipo de validación para tiempo.
TextLength Denota tipo de validación para longitud del texto.
Custom Denota tipo de validación personalizado.
Validación de datos de números enteros

Con este tipo de validación, los usuarios solo pueden ingresar números enteros dentro de un rango específico en las celdas validadas. Los ejemplos de código que siguen muestran cómo implementar el tipo de validación WholeNumber y crea la misma validación de datos usando Aspose.Cells for Node.js via C++ que creamos con Microsoft Excel arriba.

const path = require("path");
const AsposeCells = require("aspose.cells.node");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Create directory if it is not already present.
const fs = require("fs");
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir);
}
// Create a workbook object.
const workbook = new AsposeCells.Workbook();
// Create a worksheet and get the first worksheet.
const ExcelWorkSheet = workbook.getWorksheets().get(0);
// Accessing the Validations collection of the worksheet
const validations = workbook.getWorksheets().get(0).getValidations();
// Create Cell Area
const ca = new AsposeCells.CellArea();
ca.startRow = 0;
ca.endRow = 0;
ca.startColumn = 0;
ca.endColumn = 0;
// Creating a Validation object
const validation = validations.get(validations.add(ca));
// Setting the validation type to whole number
validation.setType(AsposeCells.ValidationType.WholeNumber);
// Setting the operator for validation to Between
validation.setOperator(AsposeCells.OperatorType.Between);
// Setting the minimum value for the validation
validation.setFormula1("10");
// Setting the maximum value for the validation
validation.setFormula2("1000");
// Applying the validation to a range of cells from A1 to B2 using the
// CellArea structure
const area = new AsposeCells.CellArea();
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(path.join(dataDir, "output.out.xls"));
Validación de datos de lista

Este tipo de validación permite al usuario ingresar valores de una lista desplegable. Proporciona una lista: una serie de filas que contienen datos. En el ejemplo, se agrega una segunda hoja de cálculo para contener la fuente de la lista. Los usuarios solo pueden seleccionar valores de la lista. El área de validación es el rango de celdas A1:A5 en la primera hoja de cálculo.

Es importante aquí que configures la propiedad Validation.setInCellDropDown(boolean) a true.

const AsposeCells = require("aspose.cells.node");
const path = require("path");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Create directory if it is not already present.
const fs = require("fs");
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir);
}
// Create a workbook object.
let workbook = new AsposeCells.Workbook();
// Get the first worksheet.
let worksheet1 = workbook.getWorksheets().get(0);
// Add a new worksheet and access it.
let i = workbook.getWorksheets().add();
let worksheet2 = workbook.getWorksheets().get(i);
// Create a range in the second worksheet.
let range = worksheet2.getCells().createRange("E1", "E4");
// Name the range.
range.setName("MyRange");
// Fill different cells with data in the range.
range.get(0, 0).putValue("Blue");
range.get(1, 0).putValue("Red");
range.get(2, 0).putValue("Green");
range.get(3, 0).putValue("Yellow");
// Get the validations collection.
let validations = worksheet1.getValidations();
// Create Cell Area
let ca = new AsposeCells.CellArea();
ca.startRow = 0;
ca.endRow = 0;
ca.startColumn = 0;
ca.endColumn = 0;
// Create a new validation to the validations list.
let validation = validations.get(validations.add(ca));
// Set the validation type.
validation.setType(AsposeCells.ValidationType.List);
// Set the operator.
validation.setOperator(AsposeCells.OperatorType.None);
// Set the in cell drop down.
validation.setInCellDropDown(true);
// Set the formula1.
validation.setFormula1("=MyRange");
// Enable it to show error.
validation.setShowError(true);
// Set the alert type severity level.
validation.setAlertStyle(AsposeCells.ValidationAlertType.Stop);
// Set the error title.
validation.setErrorTitle("Error");
// Set the error message.
validation.setErrorMessage("Please select a color from the list");
// Specify the validation area.
let area = new AsposeCells.CellArea();
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(path.join(dataDir, "output.out.xls"));
Validación de datos de fechas

Con este tipo de validación, los usuarios ingresan valores de fecha dentro de un rango especificado, o que cumplen criterios específicos, en las celdas validadas. En el ejemplo, el usuario está restringido a ingresar fechas entre 1970 y 1999. Aquí, el área de validación es la celda B1.

const path = require("path");
const AsposeCells = require("aspose.cells.node");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Create directory if it is not already present.
const fs = require("fs");
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir);
}
// Create a workbook.
let workbook = new AsposeCells.Workbook();
// Obtain the cells of the first worksheet.
let cells = workbook.getWorksheets().get(0).getCells();
// Put a string value into the A1 cell.
cells.get("A1").putValue("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.
let validations = workbook.getWorksheets().get(0).getValidations();
// Create Cell Area
let ca = new AsposeCells.CellArea();
ca.startRow = 0;
ca.endRow = 0;
ca.startColumn = 0;
ca.endColumn = 0;
// Add a new validation.
let validation = validations.get(validations.add(ca));
// Set the data validation type.
validation.setType(AsposeCells.ValidationType.Date);
// Set the operator for the data validation
validation.setOperator(AsposeCells.OperatorType.Between);
// Set the value or expression associated with the data validation.
validation.setFormula1("1/1/1970");
// The value or expression associated with the second part of the data validation.
validation.setFormula2("12/31/1999");
// Enable the error.
validation.setShowError(true);
// Set the validation alert style.
validation.setAlertStyle(AsposeCells.ValidationAlertType.Stop);
// Set the title of the data-validation error dialog box
validation.setErrorTitle("Date Error");
// Set the data validation error message.
validation.setErrorMessage("Enter a Valid Date");
// Set and enable the data validation input message.
validation.setInputMessage("Date Validation Type");
validation.setIgnoreBlank(true);
validation.setShowInput(true);
// Set a collection of CellArea which contains the data validation settings.
let cellArea = new AsposeCells.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(path.join(dataDir, "output.out.xls"));
Validación de datos de hora

Con este tipo de validación, los usuarios pueden ingresar horas dentro de un rango especificado, o que cumplan con ciertos criterios, en las celdas validadas. En el ejemplo, al usuario se le restringe ingresar horas entre las 09:00 y las 11:30 AM. Aquí, el área de validación es la celda B1.

const AsposeCells = require("aspose.cells.node");
const path = require("path");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Create directory if it is not already present.
if (!require("fs").existsSync(dataDir)) {
require("fs").mkdirSync(dataDir);
}
// Create a workbook.
const workbook = new AsposeCells.Workbook();
// Obtain the cells of the first worksheet.
const cells = workbook.getWorksheets().get(0).getCells();
// Put a string value into A1 cell.
cells.get("A1").putValue("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.
const validations = workbook.getWorksheets().get(0).getValidations();
// Create Cell Area
const ca = new AsposeCells.CellArea();
ca.startRow = 0;
ca.endRow = 0;
ca.startColumn = 0;
ca.endColumn = 0;
// Add a new validation.
const validation = validations.get(validations.add(ca));
// Set the data validation type.
validation.setType(AsposeCells.ValidationType.Time);
// Set the operator for the data validation.
validation.setOperator(AsposeCells.OperatorType.Between);
// Set the value or expression associated with the data validation.
validation.setFormula1("09:00");
// The value or expression associated with the second part of the data validation.
validation.setFormula2("11:30");
// Enable the error.
validation.setShowError(true);
// Set the validation alert style.
validation.setAlertStyle(AsposeCells.ValidationAlertType.Information);
// Set the title of the data-validation error dialog box.
validation.setErrorTitle("Time Error");
// Set the data validation error message.
validation.setErrorMessage("Enter a Valid Time");
// Set and enable the data validation input message.
validation.setInputMessage("Time Validation Type");
validation.setIgnoreBlank(true);
validation.setShowInput(true);
// Set a collection of CellArea which contains the data validation settings.
const cellArea = new AsposeCells.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(path.join(dataDir, "output.out.xls"));
Validación de Datos de Longitud de Texto

Con este tipo de validación, los usuarios pueden ingresar valores de texto de una longitud específica en las celdas validadas. En el ejemplo, al usuario se le restringe ingresar valores de cadena con no más de 5 caracteres. El área de validación es la celda B1.

const path = require("path");
const AsposeCells = require("aspose.cells.node");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Create directory if it is not already present.
if (!require("fs").existsSync(dataDir)) {
require("fs").mkdirSync(dataDir);
}
// Create a new workbook.
const workbook = new AsposeCells.Workbook();
// Obtain the cells of the first worksheet.
const cells = workbook.getWorksheets().get(0).getCells();
// Put a string value into A1 cell.
cells.get("A1").putValue("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.
const validations = workbook.getWorksheets().get(0).getValidations();
// Create Cell Area
const ca = new AsposeCells.CellArea();
ca.startRow = 0;
ca.endRow = 0;
ca.startColumn = 0;
ca.endColumn = 0;
// Add a new validation.
const validation = validations.get(validations.add(ca));
// Set the data validation type.
validation.setType(AsposeCells.ValidationType.TextLength);
// Set the operator for the data validation.
validation.setOperator(AsposeCells.OperatorType.LessOrEqual);
// Set the value or expression associated with the data validation.
validation.setFormula1("5");
// Enable the error.
validation.setShowError(true);
// Set the validation alert style.
validation.setAlertStyle(AsposeCells.ValidationAlertType.Warning);
// Set the title of the data-validation error dialog box.
validation.setErrorTitle("Text Length Error");
// Set the data validation error message.
validation.setErrorMessage(" Enter a Valid String");
// Set and enable the data validation input message.
validation.setInputMessage("TextLength Validation Type");
validation.setIgnoreBlank(true);
validation.setShowInput(true);
// Set a collection of CellArea which contains the data validation settings.
const cellArea = new AsposeCells.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(path.join(dataDir, "output.out.xls"));

Reglas de Validación de Datos

Cuando se implementan validaciones de datos, se puede verificar la validación asignando diferentes valores en las celdas. Cell.getValidationValue() se puede usar para obtener el resultado de la validación. El siguiente ejemplo demuestra esta función con diferentes valores. El archivo de muestra se puede descargar desde el siguiente enlace para pruebas:

sampleDataValidationRules.xlsx

const AsposeCells = require("aspose.cells.node");
const path = require("path");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Instantiate the workbook from sample Excel file
const workbook = new AsposeCells.Workbook(dataDir + "sample.xlsx");
// Access the first worksheet
const 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
const cell = worksheet.getCells().get("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
console.log("Is 3 a Valid Value for this Cell: " + cell.getValidationValue());
// 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
console.log("Is 15 a Valid Value for this Cell: " + cell.getValidationValue());
// 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
console.log("Is 30 a Valid Value for this Cell: " + cell.getValidationValue());

Verificar si la validación en la celda es de lista desplegable

Como hemos visto, hay muchos tipos de validaciones que se pueden implementar dentro de una celda. Si quieres verificar si la validación es un menú desplegable o no, se puede usar el método Validation.getInCellDropDown() para probar esto. El siguiente código de ejemplo demuestra el uso de esta propiedad. Un archivo de muestra para pruebas puede descargarse desde el siguiente enlace:

sampleValidation.xlsx

const AsposeCells = require("aspose.cells.node");
const path = require("path");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
const workbook = new AsposeCells.Workbook(dataDir + "sampleValidation.xlsx");
const sheet = workbook.getWorksheets().get("Sheet1");
const cells = sheet.getCells();
const checkDropDown = (cell, cellRef) => {
const validation = cell.getValidation();
if (validation.getInCellDropDown()) {
console.log(`${cellRef} is a dropdown`);
} else {
console.log(`${cellRef} is NOT a dropdown`);
}
};
checkDropDown(cells.get("A2"), "A2");
checkDropDown(cells.get("B2"), "B2");
checkDropDown(cells.get("C2"), "C2");

Agregar CellArea a la validación existente

Podría haber casos en los que quieras añadir CellArea a Validation existente. Cuando agregas CellArea usando Validation.addArea(CellArea), Aspose.Cells revisa todas las áreas existentes para ver si la nueva área ya existe. Si el archivo tiene una gran cantidad de validaciones, esto afecta el rendimiento. Para superar esto, la API proporciona el método Validation.addArea(CellArea, boolean, boolean). El parámetro checkIntersection indica si se debe verificar la intersección de un área dada con las áreas de validación existentes. Configurarlo a false deshabilitará la comprobación de otras áreas. El parámetro checkEdge indica si se deben verificar las áreas aplicadas. Si el área nueva se vuelve el área superior izquierda, se reconstruyen las configuraciones internas. Si estás seguro de que el área nueva no es la esquina superior izquierda, puedes establecer este parámetro a false.

El siguiente fragmento de código demuestra el uso del método Validation.addArea(CellArea, boolean, boolean) para agregar un nuevo CellArea a los Validation existentes.

const path = require("path");
const AsposeCells = require("aspose.cells.node");
// The path to the documents directory.
const sourceDir = path.join(__dirname, "data");
const outputDir = path.join(__dirname, "output");
const workbook = new AsposeCells.Workbook(path.join(sourceDir, "ValidationsSample.xlsx"));
// Access first worksheet.
const worksheet = workbook.getWorksheets().get(0);
// Accessing the Validations collection of the worksheet
const validation = worksheet.getValidations().get(0);
// Create your cell area.
const cellArea = AsposeCells.CellArea.createCellArea("D5", "E7");
// Adding the cell area to Validation
validation.addArea(cellArea, false, false);
// Save the output workbook.
workbook.save(path.join(outputDir, "ValidationsSample_out.xlsx"));

Se adjuntan los archivos de Excel de origen y salida para referencia.

Archivo de origen

Archivo de Salida

Temas avanzados