使用 SmartSheet Java SDK 读取 sheet 内容

Reading sheet contents using SmartSheet Java SDK

我正在尝试使用来自 Java 的 Smartsheet API 读取数据,以创建不同的格式,例如包含一行数据的报告和标签。

我已经设置了我的 IDE (NetBeans),这样 API 样本就可以为我工作,但它们都是关于创建新的 sheets 等,我不能找出如何读取现有 sheet 的内容。

我本以为我可以用一行代码将整个sheet读入一个java对象,但它看起来比这更复杂,而且我找不到任何适用的文档任何地方。 Java文档没有说 where/how 获取相关 ID,任何包含或排除对象实际做什么,或者哪些是必需的或可选的等等。

是否有从 java 中读取 sheet 的内容的示例可用?

我知道这是一个有点宽泛的问题,但我完全被难住了。

Smartsheet API 文档包含演示如何使用 Java SDK 的示例代码。文档中的 Java Sample Code 部分描述了如何建立连接等。然后, "API Reference" 部分中的每个操作显示示例代码(在右侧面板的 "Java" 选项卡中页面的一侧)用于使用 Java SDK 执行操作。

要获取 Sheet 数据,您将使用 "Get Sheet" operation。如 API 文档中所述,这里是该操作的 Java SDK 示例代码:

// Get sheet (omit all parameters).
smartsheet.sheetResources().getSheet(sheetId, null, null, null, null, null, null, null);

"sheetId" 参数应该是您要检索的 Sheet 的 ID。您可以通过编程方式获取此 ID(例如,通过使用像 "List Sheets" 这样的操作)——或者您可以通过 Smartsheet UI 手动获取它,如 this help article 中所述。其他参数(在示例代码中均设置为 "null")表示此操作的 API 文档中描述的 7 个参数。我想你的 IDE 中的智能感知应该指示 getSheet 函数期望的那些参数的顺序,以及每个参数的有效值(但是 API文档会解释每个参数的含义)。

谢谢金!

对于其他人,以下是对我有用的方法。此代码获取我帐户中的工作表列表,并显示名称以 "Specs - " 开头的内容:

import com.smartsheet.api.Smartsheet;
import com.smartsheet.api.SmartsheetBuilder;
import com.smartsheet.api.SmartsheetException;
import com.smartsheet.api.models.Cell;
import com.smartsheet.api.models.Column;
import com.smartsheet.api.models.PagedResult;
import com.smartsheet.api.models.Row;
import com.smartsheet.api.models.Sheet;
import com.smartsheet.api.oauth.Token;
import java.util.List;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;


public class SampleCode {

    /*
        Show the contenst of all sheets whose name starts with "Specs - "
    */
    public static void main(String[] args) {

        final String delimiter = ", ";

        // Create a Smartsheet object with our Access Token
        Token token = new Token();
        token.setAccessToken(Private.TOKEN);
        Smartsheet smartsheet = new SmartsheetBuilder().setAccessToken(token.getAccessToken()).build();

        //get a paged list of all Sheets, using null Source Inclusion & Pagination parameters
        PagedResult<Sheet> homeSheets = new PagedResult<>();
        try {
            homeSheets = smartsheet.sheetResources().listSheets(null, null);
        } catch (SmartsheetException ex) {
            Logger.getLogger(SampleCode.class.getName()).log(Level.SEVERE, null, ex);
        }
        // get a Java List<Sheet> from the PagedResult<Sheet>
        List<Sheet> sheetInfoList = homeSheets.getData();

        // Loop through each sheet in the list
        for (Sheet sheetInfo : sheetInfoList) {

            String sheetName = sheetInfo.getName();

            // Show data for all sheets with names that match our pattern
            if (sheetName.startsWith("Specs - ")) {

                // get the sheet object, with no optional includes or excludes
                Sheet theSheet = null;
                try {
                    theSheet = smartsheet.sheetResources().getSheet(sheetInfo.getId(), null, null, null, null, null, null, null);
                } catch (SmartsheetException ex) {
                    Logger.getLogger(SampleCode.class.getName()).log(Level.SEVERE, null, ex);
                }

                // Print the sheets name
                System.out.println("\nSheet: " + theSheet.getName() + "\n");

                // Print the column titles as a delimited line of text.
                List<Column> columnList = theSheet.getColumns();
                String columnHeader = null;
                for (Column col : columnList) {
                    columnHeader = columnHeader == null ? col.getTitle() : columnHeader + delimiter + col.getTitle();
                }
                System.out.println(columnHeader);

                // Print each row as a delimited line of text.
                List<Row> rowList = theSheet.getRows();
                for (Row row : rowList) {
                    List<Cell> cellList = row.getCells();
                    String rowOutput = null;
                    for (Cell cell : cellList) {
                        String cellOutput = Objects.toString(cell.getValue() != null ? cell.getValue() : cell.getDisplayValue());
                        rowOutput = rowOutput == null ? cellOutput : rowOutput + delimiter + cellOutput;
                    }
                    System.out.println(rowOutput);
                }
            }
        }
    }
}