【问题标题】:Possible problem with google sheets api v4google sheet api v4 可能存在的问题
【发布时间】:2019-11-27 14:09:35
【问题描述】:

我正在尝试使用工作表 API (https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update) 更新特定范围:

更新请求的主体必须是 ValueRange 对象,但唯一必需的字段是值。如果指定了范围,则它必须与 URL 中的范围相匹配。在 ValueRange 中,您可以选择指定它的 majorDimension。默认情况下,使用 ROWS。如果指定了 COLUMNS,则每个内部数组将写入一列而不是一行。更新时,将跳过没有数据的值。要清除数据,请使用空字符串 ("")。

当我尝试通过发送数据来更新特定单元格时,例如:

[
  [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 5523, null, null, null, null, null, null, null, P], 
  [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 5526, null, null, null, null, null, null, null, P]
]

范围是“SheetName!A2:AA3”。

更新的单元格是 A2 B2 和 A3 B3。 知道为什么会这样吗? 谢谢。

以下是导致此问题的示例: 该表最初是:

代码是:

String spreasheetId = "<SpreadsheetId>";
ValueRange valueRange = new ValueRange();
valueRange.setRange("Sheet15!A2:C4");
valueRange.setMajorDimension("ROWS");
List<Object> ob = Arrays.asList(null,"4",null);
List<Object> ob1 = Arrays.asList(null,"10",null);
List<List<Object>> list = Arrays.asList(ob,new ArrayList<>(),ob1);
valueRange.setValues(list);
sheetService.spreadsheets().values().update(spreasheetId, valueRange.getRange(), valueRange).setValueInputOption("RAW").execute();

我运行代码后的表格是这样的:

虽然应该是:

【问题讨论】:

  • 你能提供你用来执行更新的代码吗?
  • 请提供您发出的代码/完整请求。我试过参考中的API测试器,得到的结果是正确的(见:here
  • 你好。感谢您的回答。您可以看到问题中的代码

标签: google-sheets-api


【解决方案1】:

来自官方documentation,在setValues()专区:

对于输入,支持的值类型有:bool、string 和 double。 将跳过空值。要将单元格设置为空值,请将字符串值设置为空字符串。

因此,设置为null 的值基本上不会被解释,您获得的结果就像您的范围创建如下:

List<Object> ob = Arrays.asList("4");
List<Object> ob1 = Arrays.asList("10");
List<List<Object>> list = Arrays.asList(ob,new ArrayList<>(),ob1);
valueRange.setValues(list);

要实现您在原始问题中定义的目标,您必须:

  1. 获取工作表中的当前数据。
  2. 适当修改。
  3. 将其放回工作表。

您的最终代码可能如下所示:

String spreadsheetId = "<SpreadsheetId>";

ValueRange currentRange = service.spreadsheets().values().get(spreadsheetId, "A2:C4").execute();
List<List<Object>> myValues = currentRange.getValues();
myValues.get(0).set(1, "4");
myValues.get(2).set(1, "10");
ValueRange resultRange = new ValueRange().setMajorDimension("ROWS").setValues(myValues);
service.spreadsheets().values().update(spreadsheetId, "A2:C4", resultRange).setValueInputOption("RAW").execute();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多