Próbuję wygenerować plik excela z pewnymi sprawdzeniami, przeczytałem poi dev guides, aby go wdrożyć. Podczas wdrażania otrzymałem wyjątek (String literals in formulas can't be bigger than 255 characters ASCII
). POI łączy wszystkie rozwijane opcje w łańcuch deliminated '0' i sprawdza jego długość i daje mi wyjątek. :(
Używam najnowszej wersji 3.8 beta POI 5.
A mój kod jest:Ograniczenia podczas generowania rozwijanej listy programu Excel za pomocą Apache POI
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 0);
//CellRangeAddressList from org.apache.poi.ss.util package
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(getCountries());
DataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint);
dataValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("c:\\test.xls");
wb.write(fileOut);
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
Potem próbowałem z XSSFWorkBook z tym kodem:
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("new sheet");
DataValidationHelper validationHelper = new XSSFDataValidationHelper(sheet);
DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(getCountries());
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.setSuppressDropDownArrow(true);
sheet.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("c:\\test.xlsx");
Niestety, nie sukces z takim wyniku, który jest przecinek delimenated długi ciąg w jednej komórce:
Ale ręcznie w programie Excel, mogę utworzyć rozwijane komórki z tej długiej listy krajów.
Czy istnieje sposób generowania rozwijania z długimi ciągami lub API nie obsługuje?
brzmi jak bug/ograniczenie w implementacja POI, może powinieneś raczej zgłosić to jako błąd na http://poi.apache.org/ – centic