我試圖用一些驗證生成excel文件,我已閱讀poi dev guides來實現它。在實施過程中,我遇到了一個例外(String literals in formulas can't be bigger than 255 characters ASCII
)。 POI將所有下拉選項連接到'0'分隔字符串並檢查其長度並給予例外。 :(
我使用的是最新版本的POI 3.8測試版5.
我的代碼是:使用Apache POI生成excel下拉列表時的限制
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();
}
之後,我曾嘗試與XSSFWorkBook與此代碼:
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");
不幸的是,沒有與這樣的結果成功這是逗號delimenated長串在一個小區:
但在Excel中手動,我可以創建這個長的國家名單下拉單元格。
有沒有什麼辦法用長字符串生成下拉菜單,或者API不支持?
聽起來像一個bug /限制在POI實現,也許你應該寧願在http://poi.apache.org/ – centic 2011-12-28 13:26:47