无法使用JXL API在Excel中查看ComboBox
我试图用JXL API在以下代码中显示ComboBox:
ArrayList<String> arrList = new ArrayList<String>(); arrList.add("DropDown1"); arrList.add("DropDown2"); arrList.add("DropDown3"); WritableCellFeatures cellFeatures = new WritableCellFeatures(); cellFeatures.setDataValidationList(arrList); Blank b = null; Label checkLabel = null; for (int x = 0; x < xlData.size(); x++) { for (int i = 0; i <= 14; i++) { System.out.println("X:" + x + "I:" + i); if (i > 9) { checkLabel = new Label(i, x + xlHeader.size(),(String) arrList.get(0)); //b = new Blank(i, x + xlHeader.size()); //b.setCellFeatures(cellFeatures); checkLabel.setCellFeatures(cellFeatures); writableSheet.addCell(checkLabel); System.out.println("Combo Cell : " + x + ":" + i); } } }
我已经尝试了“空白”单元以及“标签”。 但是Excel仍然没有显示ComboBox。
如果您在不调用write()的情况下调用close(),则会生成一个完全空的文件。
完成将工作表和单元格添加到工作簿后,您可以在工作簿上调用write(),然后closures该文件。 这最后一步生成输出文件(在这种情况下output.xls),可以由Excel读取。 学分这个优秀的教程,它需要添加:
copy.write(); copy.close();
cellFeatures需要在循环内重新实例化
根据我的testing这个代码工作正常:
WritableCellFeatures cellFeatures = null; Label checkLabel = null; for (int x = 0; x < xlData.size(); x++) { for (int i = 0; i <= 14; i++) { System.out.println("X:" + x + "I:" + i); if (i > 9) { checkLabel = new Label(i, x + xlHeader.size(), (String) arrList.get(0)); cellFeatures = new WritableCellFeatures(); cellFeatures.setDataValidationList(arrList); checkLabel.setCellFeatures(cellFeatures); writableSheet.addCell(checkLabel); } } } // All cells modified/added. Now write out the workbook workbook.write(); workbook.close();
即使是空白版本,但在这种情况下,单元格没有初始值
根据我的testing也这个代码工作正常:
WritableCellFeatures cellFeatures = null; Blank b = null; for (int x = 0; x < xlData.size(); x++) { for (int i = 0; i <= 14; i++) { System.out.println("X:" + x + "I:" + i); if (i > 9) { b = new Blank(i, x + xlHeader.size()); cellFeatures = new WritableCellFeatures(); cellFeatures.setDataValidationList(arrList); b.setCellFeatures(cellFeatures); writableSheet.addCell(b); } } } // All cells modified/added. Now write out the workbook workbook.write(); workbook.close();
如果使用Excel 2010或Excel 2013打开生成的文件.xls
,则可能需要另存为.xlsx
以查看组合。
即使单元格实际上包含数据validation列表,并且validation约束在数据validation箭头丢失的情况下工作,我也会遇到Excel2010 / 2013中打开的.xls文件。 如果你想看到箭头和combobox,你需要保存新的格式。
而且这个缺点似乎是由最后一个Excel版本而不是由JXL引起的,在OpenOffice.org Cal 3.4.1中打开.xls没有任何问题,组合工作正常。 这可能与我用于testing的当前版本jxl 2.6.12 2009-10-26 生成Excel 2000格式的电子表格
为这个答案开发的Java代码可以提供给任何想要改进或分叉和玩的人。