POI - 同一工作表

时间:2016-12-13 04:57:00

标签: java apache-poi

我正在创建从数据库中检索名称列表的代码,并将其添加到Excel文件中,在下拉列表中供用户选择。

我遇到的问题是同一个excel文件包含多个不同的名称列表,我不知道如何将它们全部放在同一个(隐藏)工作表中。

代码

public void write()
{
    ArrayList<ArrayList<String>> listsPlayers;

    // Fill the list of players array lists from the database

    // Set the address lists objects

    for (int k = 0; k < Gender.values().length; k++)
    {
        createHiddenSheet(Category.values()[i].text() + "_" + Gender.values()[k].text(),
        listsPlayers.get(k));

        DataValidation validation = validationHelper.createValidation(listConstraints.get(constraintIndexes[k]), addressList[k]);

        sheet.addValidationData(validation);
    }
}

public void createHiddenSheet(String sheetName, ArrayList<String> listPlayerNames)
{
    DataValidationConstraint constraint = null;
    DataValidationHelper validationHelper = null;

    // Creates and hides a sheet
    Sheet hiddenSheet = workbook.createSheet(sheetName);
    workbook.setSheetHidden(workbook.getSheetIndex(sheetName), Workbook.SHEET_STATE_VERY_HIDDEN);
    hiddenSheet.protectSheet("Test");

    Name namedCell = workbook.createName();
    namedCell.setNameName(sheetName);

    // Adds the list of player names in the sheet
    for (int i = 0; i <= listPlayerNames.size(); i++)
    {
        String name = listPlayerNames.get(i);

        Row row = hiddenSheet.createRow(i);
        Cell cell = row.createCell(0);
        cell.setCellValue(name);
    }

    namedCell.setRefersToFormula(sheetName + "!$A$1:$A$" + (listPlayerNames.size() + 1));

    validationHelper = hiddenSheet.getDataValidationHelper();
    constraint = validationHelper
            .createFormulaListConstraint(sheetName + "!$A$1:$A$" + (listPlayerNames.size() + 1));

    listConstraints.add(constraint);
}

我的问题是,由于有三个类别和两个性别,因此该代码将创建六个隐藏的表格以从中获取验证。我希望创建一个更清洁的解决方案,只创建一个隐藏的工作表。

当我尝试在一张纸上使用六列(而不是一列使用六张纸)时,我遇到了指定单元格对象的多个问题。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在AxelRichter的评论之后,我意识到我的代码根本不需要命名范围对象。

以下是修改后的工作代码:

    Schema::create('company_user', function(Blueprint $table){
        $table->integer('user_id')->unsigned();
        $table->integer('company_id')->unsigned();
    });