无法使用JXL API在Excel中查看ComboBox

时间:2013-09-13 06:59:40

标签: java excel combobox jxl

我正在尝试使用以下代码在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。

1 个答案:

答案 0 :(得分:2)

如果先调用close()而不先调用write(),则会生成一个完全空的文件。

将工作表和单元格添加到工作簿后,可以在工作簿上调用write(),然后关闭该文件。最后一步生成输出文件(在本例中为output.xls),可以由Excel读取。 credits this excellent tutorial需要添加:

        copy.write(); 
        copy.close();

cellFeatures需要在循环内重新实例化

根据我的测试,这段代码工作正常:

        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();

即使是空白版本也可以,但在这种情况下,单元格没有初始值

根据我的测试,这段代码也可以正常工作:

        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以查看组合。

我通过Excel2010 / 2013体验过.xls的开放, 即使单元格实际包含数据验证列表并且验证约束有效,数据验证箭头也会丢失;如果要查看箭头和组合框,则需要以新格式保存。

此外,这个缺点似乎是由最后的Excel版本引起的,而不是由JXL引起的,在OpenOffice.org Cal 3.4.1中打开.xls这一事实证明没有任何问题,并且组合正常工作;这可能与我用于测试的当前版本jxl 2.6.12 2009-10-26 以Excel 2000格式生成电子表格

相关

The Java code developed for this answer is available给任何想改进或分享它的人。