先日、以下を書いたが、この中の createExplicitListConstraint は注意が必要だ。
Apache POI 入力規則リストの生成 - Oboe吹きプログラマの黙示録
入力規則をシート参照でなく任意のリストで指定する createExplicitListConstraint は、
どうやら、引数で指定する配列の個数に制限あるようだ。
88個までOKで、89個指定するとNGだった。どこからこの数が決まるのか??
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); List<String> alist = IntStream.rangeClosed(1, 89).boxed().map(e->Integer.toString(e)).collect(Collectors.toList()); XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint)dvHelper.createExplicitListConstraint(alist.toArray(new String[alist.size()])); CellRangeAddressList addressList = new CellRangeAddressList(0, 10, 0, 0); XSSFDataValidation validation = (XSSFDataValidation)dvHelper.createValidation(dvConstraint, addressList); validation.setShowErrorBox(true); sheet.addValidationData(validation);
これは、89個でExcelを開くと エラーになる。
89個以上は、シートに書いてシートを参照 createFormulaListConstraint を
使用すれば問題ない。
createFormulaListConstraint を使って、入力規則用に余計な書込みはしたくないのだが、
他に手段が見つからない。