Используя списки проверки данных Excel
, невозможно запретить пустые ячейки. Установленный флажок Игнорировать пустой снят, только предотвращает изменение существующей ячейки с любого значения на пустое значение. Но выбор ячейки в Excel
и последующее нажатие Del удаляет всю ячейку, а не только очищает значение ячейки. Но проверка данных не работает на ячейках, которых еще нет. Так что это проблема Excel
, и apache poi
не может ничего с этим поделать, поскольку apache poi
не может сделать то, что не может Excel
.
Лучшее, что мы можем сделать, используя проверку данных Excel
и использование apache poi
говорит пользователям как можно чаще и чаще о том, что они должны делать. Для этого мы можем показать входное сообщение, когда ячейка выбрана в дополнение к сообщению об ошибке.
Пример:
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("Unchecked");
. Это связано с тем, что в списках проверки данных Excel
нет даже значения по умолчанию. При использовании списков проверки данных Excel
существует только список допустимых значений. Затем этот список проверяется на предмет реальных значений ячеек. И реальные значения ячеек будут установлены с помощью Cell.setCellValue
.