added a section on Data Validation to the quick guide, the patch provided by Mark Beardsley

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@784852 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yegor Kozlov 2009-06-15 16:35:13 +00:00
parent fa914b75ee
commit 4551216c2a
1 changed files with 108 additions and 0 deletions

View File

@ -72,6 +72,7 @@
<li><link href="#CellComments">How to set cell comments</link></li>
<li><link href="#Autofit">How to adjust column width to fit the contents</link></li>
<li><link href="#Hyperlinks">Hyperlinks</link></li>
<li><link href="#Validation">Data Validation</link></li>
</ul>
</section>
<section><title>Features</title>
@ -1550,6 +1551,113 @@ Examples:
out.close();
</source>
</section>
<anchor id="Validation"/>
<section><title>Data Validations</title>
<note>
Currently - as of version 3.5 - the XSSF stream does not support data validations and neither it nor the HSSF stream
allow data validations to be recovered from sheets
</note>
<p><strong>Check the value a user enters into a cell against one or more predefined value(s).</strong></p>
<p>The following code will limit the value the user can enter into cell A1 to one of three integer values, 10, 20 or 30.</p>
<source>
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Data Validation");
CellRangeAddressList addressList = new CellRangeAddressList(
0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(
new String[]{"10", "20", "30"});
HSSFDataValidation dataValidation = new HSSFDataValidation
(addressList, dvConstraint);
datavalidation.setSuppressDropDownArrow(true);
sheet.addValidationData(dataValidation);
</source>
<p><strong> Drop Down Lists:</strong></p>
<p>This code will do the same but offer the user a drop down list to select a value from.</p>
<source>
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Data Validation");
CellRangeAddressList addressList = new CellRangeAddressList(
0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(
new String[]{"10", "20", "30"});
HSSFDataValidation dataValidation = new HSSFDataValidation
(addressList, dvConstraint);
datavalidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
</source>
<p><strong>Messages On Error:</strong></p>
<p>To create a message box that will be shown to the user if the value they enter is invalid.</p>
<source>
dataValidation.setErrorStyle(HSSFDataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("Box Title", "Message Text");
</source>
<p>Replace 'Box Title' with the text you wish to display in the message box's title bar
and 'Message Text' with the text of your error message.</p>
<p><strong>Prompts:</strong></p>
<p>To create a prompt that the user will see when the cell containing the data validation receives focus</p>
<source>
dataValidation.createPromptBox("Title", "Message Text");
dataValidation.setShowPromptBox(true);
</source>
<p>The text encapsulated in the first parameter passed to the createPromptBox() method will appear emboldened
and as a title to the prompt whilst the second will be displayed as the text of the message.
The createExplicitListConstraint() method can be passed and array of String(s) containing interger, floating point, dates or text values.</p>
<p><strong>Further Data Validations:</strong></p>
<p>To obtain a validation that would check the value entered was, for example, an integer between 10 and 100,
use the DVConstraint.createNumericConstraint(int, int, String, String) factory method.</p>
<source>
dvConstraint = DVConstraint.createNumericConstraint(
DVConstraint.ValidationType.INTEGER,
DVConstraint.OperatorType.BETWEEN, "10", "100");
</source>
<p>Look at the javadoc for the other validation and operator types; also note that not all validation
types are supported for this method. The values passed to the two String parameters can be formulas; the '=' symbol is used to denote a formula</p>
<source>
dvConstraint = DVConstraint.createNumericConstraint(
DVConstraint.ValidationType.INTEGER,
DVConstraint.OperatorType.BETWEEN, "=SUM(A1:A3)", "100");
</source>
<p>It is not possible to create a drop down list if the createNumericConstraint() method is called,
the setSuppressDropDownArrow(false) method call will simply be ignored.</p>
<p>Date and time constraints can be created by calling the createDateConstraint(int, String, String, String)
or the createTimeConstraint(int, String, String). Both are very similar to the above and are explained in the javadoc. </p>
<p><strong>Creating Data Validations From Spreadsheet Cells.</strong></p>
<p>The contents of specific cells can be used to provide the values for the data validation
and the DVConstraint.createFormulaListConstraint(String) method supports this.
To specify that the values come from a contiguous range of cells do either of the following:</p>
<source>
dvConstraint = DVConstraint.createFormulaListConstraint("$A$1:$A$3");
</source>
<p>or</p>
<source>
HSSFNamedRange namedRange = workbook.createName();
namedRange.setNameName("list1");
namedRange.setRefersToFormula("$A$1:$A$3");
dvConstraint = DVConstraint.createFormulaListConstraint("list1");
</source>
<p>and in both cases the user will be able to select from a drop down list containing the values from cells A1, A2 and A3.</p>
<p>The data does not have to be as the data validation. To select the data from a different sheet however, the sheet
must be given a name when created and that name should be used in the formula. So assuming the existence of a sheet named 'Data Sheet' this will work:</p>
<source>
HSSFNamedRange namedRange = workbook.createName();
namedRange.setNameName("list1");
namedRange.setRefersToFormula("'Data Sheet'!$A$1:$A$3");
dvConstraint = DVConstraint.createFormulaListConstraint("list1");
</source>
<p>as will this:</p>
<source>
dvConstraint = DVConstraint.createFormulaListConstraint("'Data Sheet'!$A$1:$A$3");
</source>
<p>whilst this will not:</p>
<source>
HSSFNamedRange namedRange = workbook.createName();
namedRange.setNameName("list1");
namedRange.setRefersToFormula("'Sheet1'!$A$1:$A$3");
dvConstraint = DVConstraint.createFormulaListConstraint("list1");
</source><p>and nor will this:</p><source>
dvConstraint = DVConstraint.createFormulaListConstraint("'Sheet1'!$A$1:$A$3");
</source>
</section>
</body>
</document>