Вы не можете использовать Double.MIN_VALUE
и Double.MAX_VALUE
в Excel
проверке данных. Excel
имеет более строгие ограничения для числовых значений c. Вы не можете хранить 1.7976931348623157E308
в ячейке Excel
, а также не можете хранить 4.9E-324
. В ячейках Excel
могут храниться только 15 значащих цифр. Таким образом, наименьшее число, которое вы можете сохранить, - -9.99999999999999E307
, а самое большое число, которое вы можете сохранить, - 9.99999999999999E307
. Поэтому вы должны использовать эти числа, чтобы ограничить диапазон возможных чисел.
DataValidationConstraint numberValidationConstraint = dataValidationHelper.createNumericConstraint(
DataValidationConstraint.ValidationType.DECIMAL,
DataValidationConstraint.OperatorType.BETWEEN,
//String.valueOf(Double.MIN_VALUE),
//String.valueOf(Double.MAX_VALUE)
"-9.99999999999999E307",
"9.99999999999999E307"
);
Но я подозреваю, что цель состоит в том, чтобы использовать только цифры c. Это также может быть достигнуто с помощью пользовательского ограничения формулы, имеющего формулу
=ISNUMBER(OFFSET($A$1,ROW()-1,COLUMN()-1))
Полный пример:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;
class CreateExcelDataValidation {
public static void main(String[] args) throws Exception {
//Workbook workbook = new HSSFWorkbook();
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
int columnCounter = 0;
int fromRow = 2;
int toRow = 2000;
DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
/*
DataValidationConstraint numberValidationConstraint = dataValidationHelper.createNumericConstraint(
DataValidationConstraint.ValidationType.DECIMAL,
DataValidationConstraint.OperatorType.BETWEEN,
//String.valueOf(Double.MIN_VALUE),
//String.valueOf(Double.MAX_VALUE)
"-9.99999999999999E307",
"9.99999999999999E307"
);
*/
DataValidationConstraint numberValidationConstraint = dataValidationHelper.createCustomConstraint(
"ISNUMBER(OFFSET($A$1,ROW()-1,COLUMN()-1))"
);
CellRangeAddressList addressList = new CellRangeAddressList(fromRow, toRow, columnCounter, columnCounter);
DataValidation numberValidation = dataValidationHelper.createValidation(numberValidationConstraint, addressList);
numberValidation.setShowErrorBox(true);
numberValidation.createErrorBox("Invalid data","Only numbers are allowed");
sheet.addValidationData(numberValidation);
FileOutputStream out = null;
if (workbook instanceof HSSFWorkbook) {
out = new FileOutputStream("CreateExcelDataValidation.xls");
} else if (workbook instanceof XSSFWorkbook) {
out = new FileOutputStream("CreateExcelDataValidation.xlsx");
}
workbook.write(out);
workbook.close();
out.close();
}
}