google-sheets-api - google sheet api v4 可能存在的问题
问题描述
我正在尝试使用工作表 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();
我运行代码后的表格是这样的:
虽然它应该是:
解决方案
从官方文档,在该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);
为了实现您在原始问题中定义的目标,您必须:
- 获取工作表中的当前数据。
- 适当地修改它。
- 将其放回工作表。
您的最终代码可能如下所示:
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();
推荐阅读
- vue.js - 悬停时打开可点击的 v 菜单
- python - 如何通过 python 运行批处理命令?
- r - Base R Choropleth:颜色未根据间隔/中断的顺序应用于地图,这使得地图难以阅读
- javascript - v-show 基于选择选项数据属性值
- c# - 从 ASP.net Web 应用程序执行时如何显示命令窗口
- jenkins - jenkins 前端的果冻替代品
- python - Python 的 mysql.connector 给我 ProgrammingError: 1064 (42000)
- python - 汽车分类 - Keras InceptionV3 修改 - Val acc 不超过 45%
- openssl - 带有弱密码的 iOS 13 证书固定停止工作但在 iOS 12 中工作正常
- r - 闪亮,两个动作按钮,它只响应第二个按钮而不响应第一个按钮