2

我正在尝试使用 Smartsheet API 在 Java 中编写一个简单的程序,该程序通过一个相当大的工作表,并缩进某些行。这是一些类似于我正在使用的代码。

Smartsheet smartsheet = new SmartsheetBuilder().setAccessToken("[My Access Token]").build();
sheetId = 00000000000000; // My Sheet ID
Sheet sheet = smartsheet.sheetResources().getSheet(sheetId, null, null, null, null, null, null, null);
List<Row> rows = sheet.getRows();
Row row = new Row();
row.setId(rows.get(2).getId()); // Updating the second row of the sheet.
row.setIndent(1);
row.setParentId(rows.get(1).getId()); // Set the parent as the row immediately above (which is not indented).
Cell cell = new Cell();
cell.setColumnId(rows.get(1).getCells().get(0).getColumnId());
cell.setValue("Test");
List<Cell> cells = Arrays.asList(cell);
row.setCells(cells);
rows = Arrays.asList(row);
smartsheet.sheetResources().rowResources().updateRows(sheetId, rows);

当我运行它时,我总是在最后一行收到以下错误。

Exception in thread "main" com.smartsheet.api.InvalidRequestException: Invalid row location.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.smartsheet.api.internal.AbstractResources$ErrorCode.getException(AbstractResources.java:147)
at com.smartsheet.api.internal.AbstractResources.handleError(AbstractResources.java:894)
at com.smartsheet.api.internal.AbstractResources.putAndReceiveList(AbstractResources.java:745)
at com.smartsheet.api.internal.SheetRowResourcesImpl.updateRows(SheetRowResourcesImpl.java:252)
at Test3.main(Test3.java:67)

缩进似乎是造成这种情况的原因,就好像我删除了 setIndent(...) 行一样,它运行良好。我在这里做错了吗?预先感谢您的帮助。

4

4 回答 4

1

从您的代码中删除这一行,它应该可以工作:

row.setParentId(rows.get(1).getId());

由于您要更新现有行的缩进,因此无需指定parentId(父行的 id 不会更改)。

我已经确认以下Update Row请求有效(成功缩进指定的行并更新单元格值 - 就像您尝试做的那样):

PUT https://api.smartsheet.com/2.0/sheets/8074385778075524/rows
[
    {
        "id": "6033604149045124", 
        "cells": [
            {"columnId": "5004885470013316","value": "TEST_VALUE"}
        ],
        "indent": 1
    }
]

并且以下Update Row请求失败并出现您报告的相同错误(无效行位置),因为它包含该parentId属性。

[
    {
        "id": "6033604149045124", 
        "cells": [
            {"columnId": "5004885470013316","value": "TEST_VALUE"}
        ],
        "indent": 1,
        "parentId": "2655904428517252"
    }
]
于 2018-02-28T17:10:21.080 回答
0

我没有尝试您的特定代码,但是,我的理解是您应该能够在不设置 parentId 的情况下设置缩进。添加新行时使用 parentId,更新现有行时使用 setIndent。

于 2018-02-26T17:05:31.423 回答
0

要补充 Kim 所说的,您可以通过设置parentIdOR 来进行缩进indent。你不能两者都做,否则你会得到Invalid row location你所看到的错误。

例如,您可以创建row对象的实例并将其设置为id.

    // Row to indent
    Row rowToIndent = new Row();
    rowToIndent.setId(rows.get(2).getId());

parentId路线,您还需要设置位置。例如,您可以setToBottom(true),这将使该行成为父行的底部子行。像这样:

    // Set ParentId
    rowToIndent.setParentId(rows.get(1).getId()); // Set the parent as the row immediately above (which is not indented).
    rowToIndent.setToBottom(true);

或者,您可以sentIndent(1)使用这条线路:

    // Set Indent
    rowToIndent.setIndent(1);

此外,此时,如果您尝试缩进已经缩进的行或无法缩进的标识级别,您也会收到Invalid row location异常。

于 2018-03-03T00:58:28.147 回答
0

我认为它试图访问一个不存在的行。

于 2018-02-26T01:40:53.030 回答