使用Smartsheet API使用Java缩进行

问题描述 投票:2回答:4

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

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(...)行一样,它运行正常。我在这里做错了吗?预先感谢您的帮助。

java spreadsheet smartsheet-api smartsheet-java-sdk-v2
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"
    }
]

0
投票

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


0
投票

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


0
投票

为了补充Kim所说的,你可以通过设置parentId来设置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异常。

© www.soinside.com 2019 - 2024. All rights reserved.