Apache POI HSSF and XSSF 快速指南 帮助文档 API poi-3.15 联系客服

发布时间 : 星期四 文章Apache POI HSSF and XSSF 快速指南 帮助文档 API poi-3.15更新完毕开始阅读758764ddaf45b307e97197ee

从电子表格单元格创建数据验证。

特定单元格的内容可用于提供数据验证的值,而DVConstraint.createFormulaListConstraint(String)方法支持此操作。要指定值来自连续单元格范围,请执行以下任一操作:

dvConstraint = DVConstraint.createFormulaListConstraint(\or

Name namedRange = workbook.createName(); namedRange.setNameName(\

namedRange.setRefersToFormula(\

dvConstraint = DVConstraint.createFormulaListConstraint(\

并且在这两种情况下,用户将能够从包含来自单元格A1,A2和A3的值的下拉列表中进行选择。

数据不必作为数据验证。然而,要从不同的工作表中选择数据,表单在创建时必须给出一个名称,并且该名称应在公式中使用。因此,假设存在一个名为“数据表”的工作表: Name namedRange = workbook.createName(); namedRange.setNameName(\

namedRange.setRefersToFormula(\ dvConstraint = DVConstraint.createFormulaListConstraint(\如下:

dvConstraint = DVConstraint.createFormulaListConstraint(\而这不会:

Name namedRange = workbook.createName(); namedRange.setNameName(\

namedRange.setRefersToFormula(\

dvConstraint = DVConstraint.createFormulaListConstraint(\也不会这样:

dvConstraint = DVConstraint.createFormulaListConstraint(\ xssf.usermodel(.xlsx格式)

当您创建基于xml的SpreadsheetML,Workbook 文件时,数据验证的工作方式类似;但有差异。 显式转换是必需的,例如,在几个地方,因为许多对xssf流中的数据验证的支持被内置到统一的ss流中,稍后更多。其他差异在代码中注释注释。

检查用户针对一个或多个预定义值输入单元格的值。

XSSFWorkbook workbook = new XSSFWorkbook();

XSSFSheet sheet = workbook.createSheet(“Data Validation”);

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); XSSFDataValidationConstraint dvConstraint =(XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(new String *+ ,“11”,“21”,“31”-); CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0);

XSSFDataValidation validation =(XSSFDataValidation)dvHelper.createValidation( dvConstraint,addressList);

//这里的布尔值false被传递给setSuppressDropDownArrow() //方法。在上面的hssf.usermodel示例中,值传递给此 //方法为true。

validation.setSuppressDropDownArrow(false);

//注意这个额外的方法调用。如果省略此方法调用,或如果 //boolean value false被传递,那么Excel将不会验证该值 //用户进入单元格。

validation.setShowErrorBox(true); sheet.addValidationData(validation); 下拉列表:

此代码将执行相同操作,但为用户提供一个下拉列表以从中选择值。

XSSFWorkbook workbook = new XSSFWorkbook();

XSSFSheet sheet = workbook.createSheet(“Data Validation”);

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); XSSFDataValidationConstraint dvConstraint =(XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(new String *+ ,“11”,“21”,“31”-); CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0);

XSSFDataValidation validation =(XSSFDataValidation)dvHelper.createValidation( dvConstraint,addressList);

validation.setShowErrorBox(true); sheet.addValidationData(validation);

注意,对setSuppressDropDowmArrow()方法的调用可以简单地排除或替换为: validation.setSuppressDropDownArrow(true); 提示和错误消息:

这两个都完全镜像hssf.usermodel所以请参考上面的“错误消息:”和“提示:”部分。

更多数据验证:

要获取将检查输入值的验证,例如,为10到100之间的整数,请使用XSSFDataValidationHelper(s)createNumericConstraint(int,int,String,String)工厂方法。

XSSFDataValidationConstraint dvConstraint =(XSSFDataValidationConstraint) dvHelper.createNumericConstraint(

XSSFDataValidationConstraint.ValidationType.INTEGER, XSSFDataValidationConstraint.OperatorType.BETWEEN, “10”,“100”);

传递给最后两个String参数的值可以是公式; '='符号用于表示公式。因此,以下将产生允许值的验证,只要它们落在对两个单元格范围求和的结果之间

XSSFDataValidationConstraint dvConstraint =(XSSFDataValidationConstraint)

dvHelper.createNumericConstraint(

XSSFDataValidationConstraint.ValidationType.INTEGER, XSSFDataValidationConstraint.OperatorType.BETWEEN, “= SUM(A1:A10)”,“= SUM(B24:B27)”);

如果调用createNumericConstraint()方法,则不可能创建下拉列表,setSuppressDropDownArrow(true)方法调用将被忽略。

请检查其他约束类型的javadoc作为示例,这些不会包括在这里。例如,有在XSSFDataValidationHelper类上定义的方法,允许您创建以下类型的约束;日期,时间,小数,整数,数字,公式,文本长度和自定义约束。

从电子表格单元格创建数据验证:

上面没有提到的另一种类型的约束是公式列表约束。它允许您创建一个验证,从一系列单元格中获取值。这段代码

XSSFDataValidationConstraint dvConstraint =(XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(“$ A $ 1:$ F $ 1”);

将创建一个验证,它的值从范围A1到F1的单元格。

如果你使用这样的命名范围,这种技术的有用性可以扩展; XSSFName name = workbook.createName(); name.setNameName(“data”);

name.setRefersToFormula(“$ B $ 1:$ F $ 1”);

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); XSSFDataValidationConstraint dvConstraint =(XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(“data”);

CellRangeAddressList addressList = new CellRangeAddressList( 0,0,0,0);

XSSFDataValidation validation =(XSSFDataValidation) dvHelper.createValidation(dvConstraint,addressList); validation.setSuppressDropDownArrow(true); validation.setShowErrorBox(true); sheet.addValidationData(validation);

对于名称的范围,OpenOffice Calc有不同的规则。 Excel支持名称的Workbook 和Workbook 作用域,但Calc不支持,似乎只支持名称的工作表作用域。因此,通常最好完全限定区域或区域的名称,像这样;

XSSFName name = workbook.createName(); name.setNameName(“data”);

name.setRefersToFormula(“'Data Validation'!$ B $ 1:$ F $ 1”); ....

然而,这打开了另一个有趣的机会,并且是将用于验证的所有数据放置在Workbook 内的隐藏表格上的命名的单元格范围中。这些范围然后可以在setRefersToFormula()方法参数中显式标识。

ss.usermodel

ss.usermodel包中的类允许开发人员创建可用于生成二进制(.xls)和SpreadsheetML(.xlsx)Workbook 的代码。

用于创建数据验证的技术与上面的xssf.usermodel示例有很多共同之处。因此,在这里只给出一个或两个例子。

检查用户针对一个或多个预定义值输入单元格的值。

Workbook workbook= new XSSFWorkbook(); //或新的HSSFWorkbook Sheet sheet = workbook.createSheet(“Data Validation”);

DataValidationHelper dvHelper = sheet.getDataValidationHelper();

DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint( new String *+ ,“13”,“23”,“33”-);

CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0); DataValidation validation = dvHelper.createValidation( dvConstraint,addressList);

//注意检查DataValidation对象的实际类型。

//如果它是XSSFDataValidation类的一个实例,那么

//布尔值'false'必须传递给setSuppressDropDownArrow() //方法和对setShowErrorBox()方法的显式调用。 if(validation instanceof XSSFDataValidation){ validation.setSuppressDropDownArrow(false); validation.setShowErrorBox(true); } else {

//如果Datavalidation包含HSSFDataValidation的实例 //class then'true'应该传递给setSuppressDropDownArrow() //方法,并且调用setShowErrorBox()不是必需的。 validation.setSuppressDropDownArrow(true); }

sheet.addValidationData(validation); 下拉列表:

此代码将执行相同操作,但为用户提供一个下拉列表以从中选择值。

Workbook workbook= new XSSFWorkbook(); //或新的HSSFWorkbook Sheet sheet = workbook.createSheet(“Data Validation”);

DataValidationHelper dvHelper = sheet.getDataValidationHelper();

DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint( new String *+ ,“13”,“23”,“33”-);

CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0); DataValidation validation = dvHelper.createValidation( dvConstraint,addressList);

//注意检查DataValidation对象的实际类型。

//如果它是XSSFDataValidation类的一个实例,那么