0

我正在尝试遍历整个工作区并在树视图中列出每个元素,但是当我尝试获取找到的文件夹中的工作表时,Folder 类中的 getSheets() 方法总是返回 null。难道我做错了什么?

    TreeItem<String> workspace = new TreeItem<>("Earls Workspace", workspaceIcon);
    workspace.setExpanded(true);

    try {
        Workspace earlsWorkspace = SmartsheetConnector.getInstance().getSmartsheet().workspaces().getWorkspace(*****);
        List<Sheet> sheets = earlsWorkspace.getSheets();
        List<Folder> folders = earlsWorkspace.getFolders();

        for (Folder folder : folders) {
            TreeItem<String> item = new TreeItem<>(folder.getName(), new ImageView(folderIcon));
            System.out.println("Folder: " + folder.getName());
            List<Sheet> folderSheets = folder.getSheets(); <- problem is here
            System.out.println(folderSheets.toArray());
            for (Sheet sheet : folderSheets) {
                TreeItem<String> subItem = new TreeItem<>(sheet.getName(), new ImageView(sheetIcon));
                item.getChildren().add(subItem);
            }

            workspace.getChildren().add(item);
        }

        for (Sheet sheet : sheets) {
            TreeItem<String> item = new TreeItem<>(sheet.getName(), new ImageView(sheetIcon));
            workspace.getChildren().add(item);
        }

        sheetExplorer.setRoot(workspace);
    } catch (SmartsheetException ex) {
        ex.printStackTrace();
    }

我故意屏蔽了工作区 ID。

4

1 回答 1

1

由于 Java SDK 模仿 Smartsheet API,因此按 ID 获取工作空间函数仅返回高级文件夹信息,不包括文件夹内的工作表,这就是它返回 null 的原因。有两种方法可以解决您的问题:

  1. 从工作区获取文件夹列表后,您可以通过 ID 函数调用 GET 文件夹,这将返回文件夹中的工作表列表。

    Workspace earlsWorkspace = SmartsheetConnector.getInstance().getSmartsheet().workspaces().getWorkspace(*****);
    List<Folder> folders = earlsWorkspace.getFolders();
    
    for (Folder folder : folders) {
        List<Sheet> folderSheets = SmartsheetConnector.getInstance().getSmartsheet().folders().getFolder(folder.getId()).getSheets();
    
        for (Sheet sheet : folderSheets) {
            System.out.println(sheet.getName());
        }
    }
    
  2. 调用getHome()函数。这将返回所有 Home 对象的嵌套列表,包括工作表、工作区和文件夹,以及可选的报告和/或模板,具体取决于您传入的 EnumSet。您将必须浏览工作区列表并找到您需要的工作区感兴趣。从那里,您可以遍历文件夹,并调用folder.getSheets()以获取文件夹中的工作表列表。

    Home home = SmartsheetConnector.getInstance().getSmartsheet().home().getHome(EnumSet.of(ObjectInclusion.TEMPLATES);
    

在 SDK 的下一个版本中,将有一个选项来指定是否要加载所有内容,包括工作区中的嵌套文件夹和嵌套工作表,因此您可以folder.getSheets()像以前一样轻松调用并返回工作表列表。

于 2015-07-01T18:29:32.983 回答