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
交互。