1

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

4

1 回答 1

2

如果在没有先调用 write() 的情况下调用 close(),则会生成一个完全空的文件。

将工作表和单元格添加到工作簿后,在工作簿上调用 write(),然后关闭文件。最后一步生成 Excel 可以读取的输出文件(在本例中为 output.xls)。归功于这个优秀的教程,它需要添加:

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

如果您.xls使用 Excel 2010 或 Excel 2013 打开生成的文件,您可能需要另存为.xlsx才能查看组合。

我经历过 Excel2010/2013 打开 .xls,即使单元格实际上包含数据验证列表并且验证约束有效,数据验证箭头也丢失了;如果要查看箭头和组合框,则需要另存为新格式。

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


为这个答案开发的 Java 代码可供任何想要改进或分叉并使用它的人使用。

于 2013-09-19T19:20:40.387 回答