Работает у меня, используя Java
и apache poi
.Должно также работать с использованием вашего Groovy
кода.
Может быть, вы не совсем уверены, где на самом деле находится строка 15, поскольку идентификаторы строки и идентификатора столбца основаны на 0?
Следующий полный кодработы:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;
public class CreateExcelDataValidation {
static Sheet sheet = null;
static boolean addMyValidation(int firstRow, int lastRow, int firstCol, int lastCol, String[] listOfValue) {
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createExplicitListConstraint(listOfValue);
CellRangeAddressList range = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
DataValidation validation = helper.createValidation(constraint, range);
validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
validation.setSuppressDropDownArrow(true);
validation.setEmptyCellAllowed(false);
validation.setShowPromptBox(true);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
return true;
}
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
sheet = workbook.createSheet("Data Validation");
sheet.createRow(0).createCell(3).setCellValue("Col 3");
sheet.createRow(1).createCell(0).setCellValue("Row 1");
sheet.createRow(10).createCell(0).setCellValue("Row 10");
sheet.createRow(15).createCell(0).setCellValue("Row 15");
sheet.createRow(25).createCell(0).setCellValue("Row 25");
addMyValidation(1, 10, 3, 3, new String[]{"One", "Two", "Three"});
addMyValidation(15, 25, 3, 3, new String[]{"A", "B", "C"});
FileOutputStream out = new FileOutputStream("CreateExcelDataValidation.xlsx");
workbook.write(out);
workbook.close();
out.close();
}
}