java 中使用 apache-POI 的日期约束验证不适用于 xlsx
date constraint validation not working for xlsx using apache-POI in java
您好,我正在尝试使用 java 中的 apache-POI 在 xlsx 文件中创建日期约束验证。
以下是我正在使用的代码。
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(spreadsheet);
XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint)dvHelper.createDateConstraint(OperatorType.BETWEEN,
"25/10/2014", "30/10/2015", "dd/mm/yyyy");
CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0);
XSSFDataValidation dataValidation = (XSSFDataValidation)dvHelper.createValidation(constraint, addressList);
dataValidation.setShowErrorBox(true);
dataValidation.setEmptyCellAllowed(false);
spreadsheet.addValidationData(dataValidation);
但它不起作用。当我尝试编辑该值时,除了该值外,它不允许我更改该值。就好像验证是针对那个特定值。
当我打开文件时,在数据验证部分,验证显示如下:
现在,如果我从开始日期和结束日期中删除“=”符号,它就可以工作了。
请帮帮我。
String dateFormat
在 XSSFDataValidationHelper.createDateConstraint 中被简单地忽略了。因此,只需将字符串“25/10/2014”和“30/10/2015”而不是 Excel 日期放入公式中。
做
DataValidationConstraint dvConstraint = dvHelper.createDateConstraint(OperatorType.BETWEEN,
""+DateUtil.getExcelDate(sdf.parse("25/10/2014")), ""+DateUtil.getExcelDate(sdf.parse("30/10/2015")), "");
相反。
DateUtil
是org.apache.poi.ss.usermodel.DateUtil
,sdf
是java.text.SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy")
完整示例:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.usermodel.DateUtil;
import java.text.SimpleDateFormat;
class DataValidationDateBetween {
public static void main(String[] args) {
try {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
DataValidationConstraint dvConstraint = dvHelper.createDateConstraint(OperatorType.BETWEEN,
""+DateUtil.getExcelDate(sdf.parse("25/10/2014")), ""+DateUtil.getExcelDate(sdf.parse("30/10/2015")), "");
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
workbook.write(new FileOutputStream("DataValidationDateBetween.xlsx"));
workbook.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
您好,我正在尝试使用 java 中的 apache-POI 在 xlsx 文件中创建日期约束验证。 以下是我正在使用的代码。
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(spreadsheet);
XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint)dvHelper.createDateConstraint(OperatorType.BETWEEN,
"25/10/2014", "30/10/2015", "dd/mm/yyyy");
CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0);
XSSFDataValidation dataValidation = (XSSFDataValidation)dvHelper.createValidation(constraint, addressList);
dataValidation.setShowErrorBox(true);
dataValidation.setEmptyCellAllowed(false);
spreadsheet.addValidationData(dataValidation);
但它不起作用。当我尝试编辑该值时,除了该值外,它不允许我更改该值。就好像验证是针对那个特定值。
当我打开文件时,在数据验证部分,验证显示如下:
现在,如果我从开始日期和结束日期中删除“=”符号,它就可以工作了。 请帮帮我。
String dateFormat
在 XSSFDataValidationHelper.createDateConstraint 中被简单地忽略了。因此,只需将字符串“25/10/2014”和“30/10/2015”而不是 Excel 日期放入公式中。
做
DataValidationConstraint dvConstraint = dvHelper.createDateConstraint(OperatorType.BETWEEN,
""+DateUtil.getExcelDate(sdf.parse("25/10/2014")), ""+DateUtil.getExcelDate(sdf.parse("30/10/2015")), "");
相反。
DateUtil
是org.apache.poi.ss.usermodel.DateUtil
,sdf
是java.text.SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy")
完整示例:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.usermodel.DateUtil;
import java.text.SimpleDateFormat;
class DataValidationDateBetween {
public static void main(String[] args) {
try {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
DataValidationConstraint dvConstraint = dvHelper.createDateConstraint(OperatorType.BETWEEN,
""+DateUtil.getExcelDate(sdf.parse("25/10/2014")), ""+DateUtil.getExcelDate(sdf.parse("30/10/2015")), "");
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
workbook.write(new FileOutputStream("DataValidationDateBetween.xlsx"));
workbook.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}