Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 Datavalidation下拉列表-如何禁止空值?_Java_Apache Poi - Fatal编程技术网

Java Datavalidation下拉列表-如何禁止空值?

Java Datavalidation下拉列表-如何禁止空值?,java,apache-poi,Java,Apache Poi,我用XSSFDataValidation在Excel中创建了一个下拉列表 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("test sheet"); XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet); XSSFDataValidationConstraint dvConstraint =

我用
XSSFDataValidation
在Excel中创建了一个下拉列表

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("test sheet");

XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) helper.createExplicitListConstraint(new String[] { "Checked", "Unchecked" });
CellRangeAddressList addressList = new CellRangeAddressList(0, 10, 0, 0);
XSSFDataValidation validation = (XSSFDataValidation)helper.createValidation(dvConstraint, addressList);
validation.setShowErrorBox(true);

sheet.addValidationData(validation);
我的问题如下:

  • 是否可以禁止空值?我的意思是,强制用户在单元格中输入一个值。我尝试了
    验证。setEmptyCellAllowed(false)但仍然可以输入空值
  • 除了
    cell.setCellValue(“未选中”)之外,还有另一种定义默认值的方法

提前感谢。

使用
Excel
的数据验证列表,无法禁止空单元格。未选中“忽略空白”复选框只会防止现有单元格从任何值更改为空值。但是在
Excel
中选择一个单元格,然后按Del键将删除整个单元格,而不仅仅是清空单元格值。但数据验证在尚未出现的单元格上不起作用。因此,这是一个
Excel
问题,
apache-poi
不能对此做任何事情,因为
apache-poi
不能做
Excel
不能做的事情

使用
Excel
的数据验证和使用
apachepoi
我们能做的最好的事情就是尽可能多地、经常地告诉用户他们应该做什么。为此,我们可以在错误消息之外选择单元格时显示输入消息

例如:

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 CreateExcelDataValidationList {

 public static void main(String[] args) throws Exception {

  //Workbook workbook = new HSSFWorkbook();
  Workbook workbook = new XSSFWorkbook();

  Sheet sheet = workbook.createSheet();

  DataValidationHelper dvHelper = sheet.getDataValidationHelper();
  DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(new String[]{"Checked", "Unchecked"}) ;
  int lastRow = workbook.getSpreadsheetVersion().getLastRowIndex();
  CellRangeAddressList addressList = new CellRangeAddressList(0, 10, 0, 0);

  DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
  validation.setEmptyCellAllowed(false);
  validation.createPromptBox("Prompt", "Please select Cecked or Unchecked from dropdown list.");
  validation.createErrorBox("Error", "Please select Cecked or Unchecked from dropdown list.");
  if (workbook instanceof XSSFWorkbook) validation.setShowErrorBox(true);
  if (workbook instanceof XSSFWorkbook) validation.setShowPromptBox(true);
  sheet.addValidationData(validation);

  FileOutputStream out = null;
  if (workbook instanceof HSSFWorkbook) {
   out = new FileOutputStream("CreateExcelDataValidationList.xls");
  } else if (workbook instanceof XSSFWorkbook) {
   out = new FileOutputStream("CreateExcelDataValidationList.xlsx");
  }
  workbook.write(out);
  workbook.close();
  out.close();

 }
}

不,除了
cell.setCellValue(“未选中”)之外,没有其他方法可以定义默认值。这是因为在
Excel
的数据验证列表中甚至没有默认值。使用
Excel
的数据验证列表,只有一个有效值列表。然后对照实际单元格值检查此列表。真正的单元格值将使用
cell.setCellValue

来设置。非常感谢,这总比没有好。@Royce:只有当用户在单元格中键入列表项以外的内容或在编辑栏中删除单元格内容时,才会出现错误消息。正如我在回答中所说,使用[Del]键不仅删除单元格内容,而且删除整个单元格,因此不会发生错误。我认为这是
Excel
数据验证的不足。但正如前面所说的,这并不是ApachePOI所能治愈的。数据验证在
Excel
GUI
中运行,
apache-poi
不与
Excel
GUI
交互。