Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用apache POI的日期约束验证不适用于xlsx_Java_Apache Poi_Xlsx - Fatal编程技术网

在java中使用apache POI的日期约束验证不适用于xlsx

在java中使用apache POI的日期约束验证不适用于xlsx,java,apache-poi,xlsx,Java,Apache Poi,Xlsx,您好,我正在尝试使用java中的ApachePOI在xlsx文件中创建日期约束验证。 下面是我正在使用的代码 XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(spreadsheet); XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint)dvHelper.createDateConstraint(OperatorType.B

您好,我正在尝试使用java中的ApachePOI在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);
但它不起作用。当我试图编辑该值时,除了该值之外,它不允许我更改该值。就好像验证是针对那个特定的值

打开文件时,在数据验证部分,验证显示如下:

现在,如果我从开始日期和结束日期中删除“=”符号,它就会工作。
请在此帮助我。

字符串日期格式在中被忽略。因此,简单地将字符串“2014年10月25日”和“2015年10月30日”输入公式中,而不是Excel日期

相反

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();
  }
 }
}

在中,
字符串dateFormat
被忽略。因此,简单地将字符串“2014年10月25日”和“2015年10月30日”输入公式中,而不是Excel日期

相反

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();
  }
 }
}

谢谢阿克塞尔,它成功了。但这同样适用于HSSF。所以我认为它也适用于XSSF。是的,它不会忽略给定的
字符串dateFormat
。谢谢axel,它起作用了。但这同样适用于HSSF。因此我认为它也适用于XSSF。是的,不会忽略给定的
字符串dateFormat