String literals in formulas can't be bigger than 255 characters ASCII
来源:互联网 发布:高分数据是什么 编辑:程序博客网 时间:2024/06/05 17:13
http://stackoverflow.com/questions/8655185/limitation-while-generating-excel-drop-down-list-with-apache-poi
I'm trying to generate an excel file with some validations, I've read the poi dev guides for implementing it. During implementation, I got an exception (String literals in formulas can't be bigger than 255 characters ASCII
). POI concatenates all drop down options into '0' deliminated string and checking its length and giving me exception. :(
I'm using latest version of POI 3.8 beta 5.
And my code is:
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(); }
After that I have tried with XSSFWorkBook with this code:
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");
Unfortunately, no success with such result which is comma delimenated long string in one cell:
But manually in excel, I can create dropdown cells with long this country list.
Is there any way generate dropdown with long strings, or API does not support?
1 Answer
I understood it, Excel itself does not allow entering validation range string more than 255 characters, this was not POI limitation. And now with usingNamed Ranges and Named Cells is working properly for me. So I put my validation range tokens in another sheet(made hidden) and I referenced desired cell ranges from my real sheet. Here is my working code:
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet realSheet = workbook.createSheet("Sheet xls"); HSSFSheet hidden = workbook.createSheet("hidden"); for (int i = 0, length= countryName.length; i < length; i++) { String name = countryName[i]; HSSFRow row = hidden.createRow(i); HSSFCell cell = row.createCell(0); cell.setCellValue(name); } Name namedCell = workbook.createName(); namedCell.setNameName("hidden"); namedCell.setRefersToFormula("hidden!A1:A" + countryName.length); DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden"); CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); HSSFDataValidation validation = new HSSFDataValidation(addressList, constraint); workbook.setSheetHidden(1, true); realSheet.addValidationData(validation); FileOutputStream stream = new FileOutputStream("c:\\range.xls"); workbook.write(stream); stream.close();
- String literals in formulas can't be bigger than 255 characters ASCII
- String literals in formulas can't be bigger than 255 characters ASCII
- nova-network UnicodeEncodeError: 'ascii' codec can't encode characters in
- UnicodeEncodeError: 'ascii' codec can't encode characters in position
- UnicodeEncodeError: 'ascii' codec can't encode characters in position
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 解决方法
- 解决UnicodeEncodeError: 'ascii' codec can't encode characters in position
- UnicodeEncodeError: 'ascii' codec can't encode characters in position问题
- UnicodeEncodeError: 'ascii' codec can't encode characters in 解决办法
- UnicodeEncodeError: 'ascii' codec can't encode characters in position
- 'ascii' codec can't encode characters in position解决办法
- UnicodeEncodeError: 'ascii' codec can't encode characters
- {ros} ascii codec can't encode characters
- UnicodeEncodeError: ‘ascii’ codec can’t encode characters
- 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-15: ordinal not in range(128
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
- 五个求解算法问题的方法
- MFC中 将单文档视图修改为多文档(如此简单)
- Win8小问题解决
- 八皇后问题
- 大数据应用时代来袭 SaaS走向没落?
- String literals in formulas can't be bigger than 255 characters ASCII
- Matlab--------------如何让MATLAB程序运行不显示警告
- [objective-c]教程七-----反思Objective-C类
- 不用除法运算,实现A/3
- 公司以及环境以及学习模式
- jndi 数据源配置密码加密
- 自动切换IE代理设置: 简单使用IE自动配置脚本
- 对象持久化
- poj 百练2820(基础题)