Datavalidering
Microsoft Excel tillhandahåller några bra funktioner för att automatiskt filtrera eller validera kalkylbladsdata.
Datavalidering är möjligheten att ställa in regler som hänför sig till data som matas in på ett kalkylblad. Använd till exempel validering för att säkerställa att en kolumn märkt DATUM bara innehåller datum, eller att en annan kolumn bara innehåller siffror. Du kan till och med se till att en kolumn märkt DATUM endast innehåller datum inom ett visst intervall. Med datavalidering kan du styra vad som skrivs in i celler i kalkylbladet. Aspose.Cells stöder fullt ut Microsoft Excels datavaliderings- och autofilterfunktioner. Den här artikeln förklarar hur du använder funktionerna i Microsoft Excel och hur du kodar dem med Aspose.Cells.
Datavalideringstyper och exekvering
Microsoft Excel stöder ett antal olika typer av datavalidering. Varje typ används för att styra vilken typ av data som matas in i en cell eller cellintervall. Nedan illustrerar kodavsnitt hur man validerar det:
- Numbers är heladet vill säga att de inte har en decimaldel.
- Decimaltal följer rätt struktur. Kodexemplet definierar att ett cellområde ska ha två decimaler.
- Värden är begränsade till en lista med värden. Listvalidering definierar en separat lista med värden som kan tillämpas på en cell eller cellintervall.
- Datum faller inom ett specifikt intervall.
- Tiden ligger inom ett visst intervall.
- En text är inom en given teckenlängd.
Datavalidering med Microsoft Excel
Så här skapar du valideringar med Microsoft Excel:
-
I ett kalkylblad väljer du de celler som du vill tillämpa validering på.
-
FrånDatamenyn, väljGodkännande. Valideringsdialogrutan visas.
-
Klicka påinställningarfliken och ange inställningar som visas nedan.
Inställningar för datavalidering
Datavalidering med Aspose.Cells
Datavalidering är en kraftfull funktion för att validera informationen som skrivs in i kalkylblad. Med datavalidering kan utvecklare ge användarna en lista med valmöjligheter, begränsa datainmatningar till en specifik typ eller storlek, etc. I Aspose.Cells, varderaArbetsbladklass har enValideringarobjekt som representerar en samling avGodkännandeföremål. För att ställa in validering, ställ in några avGodkännandeklass egenskaper:
- Typ: representerar valideringstypen, som kan specificeras genom att använda ett av de fördefinierade värdena iValidationTypeuppräkning.
- Operatör: representerar den operator som ska användas i valideringen, som kan specificeras genom att använda ett av de fördefinierade värdena iOperatörstypuppräkning.
- Formel 1: representerar värdet eller uttrycket som är associerat med den första delen av datavalideringen.
- Formel 2: representerar värdet eller uttrycket som är associerat med den andra delen av datavalideringen.
NärGodkännandeobjektets egenskaper har konfigurerats kan utvecklare användaCellAreastruktur för att lagra information om cellintervallet som kommer att valideras med den skapade valideringen.
Typer av datavalidering
Datavalidering låter dig bygga in affärsregler i varje cell så att felaktiga inmatningar resulterar i felmeddelanden. Affärsregler är de policyer och procedurer som styr hur ett företag fungerar. Aspose.Cells stöder alla viktiga typer av datavalidering.
DeValidationTypeuppräkning har följande medlemmar:
Medlemsnamn | Beskrivning |
---|---|
ANY_VALUE | Betecknar ett värde av vilken typ som helst. |
HELTAL | Betecknar valideringstyp för heltal. |
DECIMAL | Betecknar valideringstyp för decimaltal. |
LISTA | Betecknar valideringstyp för rullgardinsmenyn. |
DATUM | Betecknar valideringstyp för datum. |
TID | Betecknar valideringstyp för Tid. |
TEXT_LENGTH | Betecknar valideringstyp för textens längd. |
BESTÄLLNINGS | Anger anpassad valideringstyp. |
Programmeringsexempel: Helnummerdatavalidering
Med denna typ av validering kan användare endast ange heltal inom ett specificerat intervall i de validerade cellerna. Kodexemplen som följer visar hur man implementerarHELTALvalideringstyp. Exemplet skapar samma datavalidering med Aspose.Cells som vi skapade med Microsoft Excel ovan.
// 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"); |
Programmeringsexempel: Decimaldatavalidering
Med denna typ av validering kan användaren ange decimaltal i de validerade cellerna. I exemplet är användaren begränsad till att endast ange decimalvärden och valideringsområdet är 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"); |
Programmeringsexempel: Listdatavalidering
Denna typ av validering tillåter användaren att ange värden från en rullgardinslista. Det ger en lista: en serie rader som innehåller data. Användare kan bara välja värden från listan. Valideringsområdet är cellområdet A1:A5 i det första kalkylbladet.
Det är viktigt här att du ställer inValidation.setInCellDropDown egendom tillSann.
// 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"); |
Programmeringsexempel: Validering av datumdata
Med denna typ av validering anger användare datumvärden inom ett specificerat intervall, eller uppfyller specifika kriterier, i de validerade cellerna. I exemplet är användaren begränsad till att ange datum mellan 1970 och 1999. Här är valideringsområdet B1-cellen.
// 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"); |
Programmeringsexempel: Tidsdatavalidering
Med denna typ av validering kan användare ange tider inom ett specificerat intervall, eller uppfylla vissa kriterier, i de validerade cellerna. I exemplet är användaren begränsad att ange tider mellan 09:00 och 11:30. Här är valideringsområdet B1-cellen.
// 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"); |
Programmeringsexempel: Textlängdsdatavalidering
Med denna typ av validering kan användare ange textvärden av en angiven längd i de validerade cellerna. I exemplet är användaren begränsad till att ange strängvärden med högst 5 tecken. Valideringsområdet är B1-cellen.
// 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"); |
Regler för datavalidering
När datavalideringar implementeras kan valideringen kontrolleras genom att tilldela olika värden i cellerna.Cell.GetValidationValue() kan användas för att hämta valideringsresultatet. Följande exempel visar denna funktion med olika värden. Exempelfilen kan laddas ner från följande länk för testning:
SampleDataValidationRules.xlsx
Exempelkod
// 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()); |
Kontrollera om validering i en cell är rullgardinsmeny
Som vi har sett finns det många typer av valideringar som kan implementeras inom en cell. Om du vill kontrollera om validering är rullgardinsmeny eller inte,Validation.InCellDropDown egenskap kan användas för att testa detta. Följande exempelkod visar användningen av den här egenskapen. Exempelfilen för testning kan laddas ner från följande länk:
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"); | |
} |
Lägg till CellArea till befintlig validering
Det kan finnas fall där du kanske vill lägga tillCellAreaatt existeraGodkännande. När du lägger tillCellAreaanvänder sig avValidation.AddArea(CellArea cellArea), Aspose.Cells kontrollerar alla befintliga områden för att se om det nya området redan finns. Om filen har ett stort antal valideringar tar detta en prestandaträff. För att övervinna detta tillhandahåller APIValidation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) metod. Decheck Intersectionparametern anger om skärningspunkten mellan ett givet område och befintliga valideringsområden ska kontrolleras. Ställer in den påfalskkommer att inaktivera kontrollen av andra områden. DecheckEdgeparametern indikerar om de applicerade områdena ska kontrolleras. Om det nya området blir det övre vänstra området byggs interna inställningar om. Om du är säker på att det nya området inte är det övre vänstra området kan du ställa in denna parameter somfalsk.
Följande kodavsnitt visar användningen avValidation.AddAreaCellArea cellArea, bool checkIntersection, bool checkEdge) metod för att lägga till nyCellAreaatt existeraGodkännande.
// 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"); |
Käll- och utdata Excel-filerna bifogas som referens.