Validación de datos
Microsoft Excel proporciona algunas buenas características para autofiltrar o validar datos en la hoja de cálculo.
La validación de datos es la capacidad de establecer reglas relacionadas con los datos introducidos en una hoja de cálculo. Por ejemplo, usar validación para asegurarse de que una columna etiquetada como FECHA contiene solo fechas, o que otra columna contiene solo números. Incluso podría asegurar que una columna etiquetada como FECHA contiene solo fechas dentro de un rango específico. Con la validación de datos, puedes controlar lo que se introduce en las celdas de la hoja de cálculo. Aspose.Cells soporta completamente la validación de datos y las funciones de autofiltrado de Microsoft Excel. Este artículo explica cómo usar las funciones en Microsoft Excel y cómo codificarlas usando Aspose.Cells.
Tipos de Validación de Datos y Ejecución
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 una 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 están dentro de un rango específico.
- El tiempo 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:
-
En una hoja de cálculo, seleccione las celdas a las que desea aplicar la validación.
-
En el menú Datos, selecciona Validación. Se mostrará el cuadro de diálogo de validación.
-
Haz clic en la pestaña Configuración e introduce las configuraciones como se muestra a continuación.
Configuración de validación de datos
Validación de datos con Aspose.Cells
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, cada clase Worksheet tiene un objeto Validations que representa una colección de objetos Validation. Para configurar la validación, establezca algunas de las propiedades de la clase Validation:
- Type: representa el tipo de validación, que puede especificarse utilizando uno de los valores predefinidos en la enumeración ValidationType.
- Operator: representa el operador que se utilizará en la validación, que puede especificarse utilizando uno de los valores predefinidos en la enumeración OperatorType.
- Formula1: representa el valor o expresión asociada con la primera parte de la validación de datos.
- Formula2: representa el valor o expresión asociada con la segunda parte de la validación de datos.
Cuando se han configurado las propiedades del objeto Validation, los desarrolladores pueden utilizar la estructura CellArea para almacenar información sobre el rango de celdas que se validarán utilizando la validación creada.
Tipos de validación de datos
La validación de datos le permite establecer reglas de negocio en cada celda para que las entradas incorrectas resulten en mensajes de error. Las reglas de negocio son las políticas y procedimientos que rigen cómo opera un negocio. Aspose.Cells admite todos los tipos importantes de validación de datos.
La enumeración ValidationType tiene los siguientes miembros:
Nombre del miembro | Descripción |
---|---|
ANY_VALUE | Denota un valor de cualquier tipo. |
WHOLE_NUMBER | Denota el tipo de validación para números enteros. |
DECIMAL | Denota el tipo de validación para números decimales. |
LIST | Denota el tipo de validación para lista desplegable. |
DATE | Denota el tipo de validación para fechas. |
TIME | Denota el tipo de validación para hora. |
TEXT_LENGTH | Denota el tipo de validación para la longitud del texto. |
CUSTOM | Denota tipo de validación personalizada. |
Ejemplo de programación: 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 especificado en las celdas validadas. Los ejemplos de código que siguen muestran cómo implementar el tipo de validación NÚMERO_ENTERO. El ejemplo crea la misma validación de datos usando Aspose.Cells que creamos usando Microsoft Excel anteriormente.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(WholeNumberDataValidation.class) + "data/"; | |
// Instantiating an Workbook object | |
Workbook workbook = new Workbook(); | |
WorksheetCollection worksheets = workbook.getWorksheets(); | |
// Accessing the Validations collection of the worksheet | |
Worksheet worksheet = worksheets.get(0); | |
// Applying the validation to a range of cells from A1 to B2 using the | |
// CellArea structure | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 0; | |
area.EndRow = 1; | |
area.EndColumn = 1; | |
ValidationCollection validations = worksheet.getValidations(); | |
// Creating a Validation object | |
int index = validations.add(area); | |
Validation validation = validations.get(index); | |
// Setting the validation type to whole number | |
validation.setType(ValidationType.WHOLE_NUMBER); | |
// Setting the operator for validation to Between | |
validation.setOperator(OperatorType.BETWEEN); | |
// Setting the minimum value for the validation | |
validation.setFormula1("10"); | |
// Setting the maximum value for the validation | |
validation.setFormula2("1000"); | |
// Saving the Excel file | |
workbook.save(dataDir + "WNDValidation_out.xls"); | |
// Print message | |
System.out.println("Process completed successfully"); |
Ejemplo de programación: Validación de datos decimales
Con este tipo de validación, el usuario puede ingresar números decimales en las celdas validadas. En el ejemplo, el usuario está restringido a ingresar solo valores decimales y el área de validación es A1:A10.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(DecimalDataValidation.class) + "data/"; | |
// Create a workbook object. | |
Workbook workbook = new Workbook(); | |
// Create a worksheet and get the first worksheet. | |
Worksheet ExcelWorkSheet = workbook.getWorksheets().get(0); | |
// Specify the validation area of cells. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 0; | |
area.EndRow = 9; | |
area.EndColumn = 0; | |
// Obtain the existing Validations collection. | |
ValidationCollection validations = ExcelWorkSheet.getValidations(); | |
// Create a validation object adding to the collection list. | |
int index = validations.add(area); | |
Validation validation = validations.get(index); | |
// Set the validation type. | |
validation.setType(ValidationType.DECIMAL); | |
// Specify the operator. | |
validation.setOperator(OperatorType.BETWEEN); | |
// Set the lower and upper limits. | |
validation.setFormula1("10"); | |
validation.setFormula2("1000"); | |
// Set the error message. | |
validation.setErrorMessage("Please enter a valid integer or decimal number"); | |
// Save the workbook. | |
workbook.save(dataDir + "DDValidation_out.xls"); | |
// Print message | |
System.out.println("Process completed successfully"); |
Ejemplo de programación: 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. 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 establezca la propiedad Validation.setInCellDropDown en true.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(ListDataValidation.class) + "data/"; | |
// Create a workbook object. | |
Workbook workbook = new Workbook(); | |
// Get the first worksheet. | |
Worksheet ExcelWorkSheet = workbook.getWorksheets().get(0); | |
// Add a new worksheet and access it. | |
int sheetIndex = workbook.getWorksheets().add(); | |
Worksheet worksheet2 = workbook.getWorksheets().get(sheetIndex); | |
// Create a range with name in the second worksheet. | |
Range range = worksheet2.getCells().createRange(0, 4, 4, 4); | |
range.setName("MyRange"); | |
// Fill different cells with data in the range. | |
range.get(0, 0).setValue("Blue"); | |
range.get(1, 0).setValue("Red"); | |
range.get(2, 0).setValue("Green"); | |
range.get(3, 0).setValue("Yellow"); | |
// Specify the validation area of cells. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 0; | |
area.EndRow = 4; | |
area.EndColumn = 0; | |
// Obtain the existing Validations collection. | |
ValidationCollection validations = ExcelWorkSheet.getValidations(); | |
// Create a validation object adding to the collection list. | |
int index = validations.add(area); | |
Validation validation = validations.get(index); | |
// Set the validation type. | |
validation.setType(ValidationType.LIST); | |
// 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(ValidationAlertType.STOP); | |
// Set the error title. | |
validation.setErrorTitle("Error"); | |
// Set the error message. | |
validation.setErrorMessage("Please select a color from the list"); | |
// Save the excel file. | |
workbook.save(dataDir + "LDValidation_out.xls"); | |
// Print message | |
System.out.println("Process completed successfully"); |
Ejemplo de programación: Validación de datos de fecha
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.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(DateDataValidation.class) + "data/"; | |
// Create a workbook. | |
Workbook workbook = new Workbook(); | |
// Obtain the cells of the first worksheet. | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
// Put a string value into the A1 cell. | |
cells.get("A1").setValue("Please enter Date b/w 1/1/1970 and 12/31/1999"); | |
// Wrap the text. | |
Style style = cells.get("A1").getStyle(); | |
style.setTextWrapped(true); | |
cells.get("A1").setStyle(style); | |
// Set row height and column width for the cells. | |
cells.setRowHeight(0, 31); | |
cells.setColumnWidth(0, 35); | |
// Set a collection of CellArea which contains the data validation | |
// settings. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 1; | |
area.EndRow = 0; | |
area.EndColumn = 1; | |
// Get the validations collection. | |
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations(); | |
// Add a new validation. | |
int i = validations.add(area); | |
Validation validation = validations.get(i); | |
// Set the data validation type. | |
validation.setType(ValidationType.DATE); | |
// Set the operator for the data validation | |
validation.setOperator(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(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); | |
// Save the excel file. | |
workbook.save(dataDir + "DDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003); | |
// Print message | |
System.out.println("Process completed successfully"); |
Ejemplos de programación: Validación de datos de tiempo
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.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(TimeDataValidation.class) + "data/"; | |
// Create a workbook. | |
Workbook workbook = new Workbook(); | |
// Obtain the cells of the first worksheet. | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
// Put a string value into A1 cell. | |
cells.get("A1").setValue("Please enter Time b/w 09:00 and 11:30 'o Clock"); | |
// Wrap the text. | |
Style style = cells.get("A1").getStyle(); | |
style.setTextWrapped(true); | |
cells.get("A1").setStyle(style); | |
// Set row height and column width for the cells. | |
cells.setRowHeight(0, 31); | |
cells.setColumnWidth(0, 35); | |
// Set a collection of CellArea which contains the data validation | |
// settings. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 1; | |
area.EndRow = 0; | |
area.EndColumn = 1; | |
// Get the validations collection. | |
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations(); | |
// Add a new validation. | |
int i = validations.add(area); | |
Validation validation = validations.get(i); | |
// Set the data validation type. | |
validation.setType(ValidationType.TIME); | |
// Set the operator for the data validation | |
validation.setOperator(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(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); | |
// Save the excel file. | |
workbook.save(dataDir + "TDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003); | |
// Print message | |
System.out.println("Process completed successfully"); |
Ejemplos de programación: 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.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(TextLengthDataValidation.class) + "data/"; | |
// Create a new workbook. | |
Workbook workbook = new Workbook(); | |
// Obtain the cells of the first worksheet. | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
// Put a string value into A1 cell. | |
cells.get("A1").setValue("Please enter a string not more than 5 chars"); | |
// Wrap the text. | |
Style style = cells.get("A1").getStyle(); | |
style.setTextWrapped(true); | |
cells.get("A1").setStyle(style); | |
// Set row height and column width for the cells. | |
cells.setRowHeight(0, 31); | |
cells.setColumnWidth(0, 35); | |
// Set a collection of CellArea which contains the data validation | |
// settings. | |
CellArea area = new CellArea(); | |
area.StartRow = 0; | |
area.StartColumn = 1; | |
area.EndRow = 0; | |
area.EndColumn = 1; | |
// Get the validations collection. | |
ValidationCollection validations = workbook.getWorksheets().get(0).getValidations(); | |
// Add a new validation. | |
int i = validations.add(area); | |
Validation validation = validations.get(i); | |
// Set the data validation type. | |
validation.setType(ValidationType.TEXT_LENGTH); | |
// Set the operator for the data validation. | |
validation.setOperator(OperatorType.LESS_OR_EQUAL); | |
// 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(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); | |
// Save the excel file. | |
workbook.save(dataDir + "TLDValidation_out.xls", FileFormatType.EXCEL_97_TO_2003); | |
// Print message | |
System.out.println("Process completed successfully"); |
Reglas de Validación de Datos
Cuando se implementan validaciones de datos, la validación se puede verificar asignando diferentes valores a las celdas. Cell.GetValidationValue() se puede utilizar para obtener el resultado de la validación. El siguiente ejemplo demuestra esta función con diferentes valores. El archivo de ejemplo se puede descargar desde el siguiente enlace para probarlo:
SampleDataValidationRules.xlsx
Código de Ejemplo
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// Instantiate the workbook from sample Excel file | |
Workbook workbook = new Workbook(srcDir + "sampleDataValidationRules.xlsx"); | |
// Access the first worksheet | |
Worksheet 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 | |
*/ | |
Cell 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 | |
System.out.println("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 | |
System.out.println("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 | |
System.out.println("Is 30 a Valid Value for this Cell: " + cell.getValidationValue()); | |
// Enter large number 12345678901 inside this cell | |
// Since it is not between 1 and 999999999999, it should pass the validation again | |
Cell cell2 = worksheet.getCells().get("D1"); | |
cell2.putValue(12345678901l); | |
// Check if number 12345678901 satisfies the Data Validation rule applied on this cell | |
System.out.println("Is 12345678901 a Valid Value for this Cell: " + cell2.getValidationValue()); |
Verifique si la validación en una celda es desplegable
Como hemos visto, hay muchos tipos de validaciones que se pueden implementar dentro de una celda. Si desea verificar si la validación es desplegable o no, se puede utilizar la propiedad Validation.InCellDropDown para probar esto. El siguiente código de muestra demuestra el uso de esta propiedad. El archivo de ejemplo para probar se puede descargar desde el siguiente enlace:
sampleDataValidationRules.xlsx
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
Workbook book = new Workbook(srcDir + "sampleValidation.xlsx"); | |
Worksheet sheet = book.getWorksheets().get("Sheet1"); | |
Cells cells = sheet.getCells(); | |
Cell a2 = cells.get("A2"); | |
Validation va2 = a2.getValidation(); | |
if(va2.getInCellDropDown()) { | |
System.out.println("A2 is a dropdown"); | |
} else { | |
System.out.println("A2 is NOT a dropdown"); | |
} | |
Cell b2 = cells.get("B2"); | |
Validation vb2 = b2.getValidation(); | |
if(vb2.getInCellDropDown()) { | |
System.out.println("B2 is a dropdown"); | |
} else { | |
System.out.println("B2 is NOT a dropdown"); | |
} | |
Cell c2 = cells.get("C2"); | |
Validation vc2 = c2.getValidation(); | |
if(vc2.getInCellDropDown()) { | |
System.out.println("C2 is a dropdown"); | |
} else { | |
System.out.println("C2 is NOT a dropdown"); | |
} |
Agregar CellArea a la validación existente
Puede haber casos en los que desee agregar CellArea a la Validación existente. Cuando se agrega CellArea usando Validation.AddArea(CellArea cellArea), Aspose.Cells verifica todas las áreas existentes para ver si la nueva área ya existe. Si el archivo tiene un gran número de validaciones, esto afecta el rendimiento. Para solucionar esto, la API proporciona el método Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge). El parámetro checkIntersection indica si se debe verificar la intersección de un área dada con las áreas de validación existentes. Establecerlo en false deshabilitará la verificación de otras áreas. El parámetro checkEdge indica si se deben comprobar las áreas aplicadas. Si la nueva área se convierte en la parte superior izquierda, se reconstruyen las configuraciones internas. Si está seguro de que la nueva área no es la parte superior izquierda, puede establecer este parámetro en false.
El siguiente fragmento de código demuestra el uso del método Validation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) para agregar una nueva CellArea a la Validación existente.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the directories. | |
String sourceDir = Utils.Get_SourceDirectory(); | |
String outputDir = Utils.Get_OutputDirectory(); | |
Workbook workbook = new Workbook(sourceDir + "ValidationsSample.xlsx"); | |
// Access first worksheet. | |
Worksheet worksheet = workbook.getWorksheets().get(0); | |
// Accessing the Validations collection of the worksheet | |
Validation validation = worksheet.getValidations().get(0); | |
// Create your cell area. | |
CellArea cellArea = CellArea.createCellArea("D5", "E7"); | |
// Adding the cell area to Validation | |
validation.addArea(cellArea, false, false); | |
// Save the output workbook. | |
workbook.save(outputDir + "ValidationsSample_out.xlsx"); |
Se adjuntan los archivos de Excel de origen y salida para referencia.