api - 使用 Google Sheets API,当我输入数据时,不支持添加和更新列格式
问题描述
所以,这真的是一个基于我上次尝试的后续问题
如何使用 API 将列添加到 Google 表格并在同一调用中提供列的名称和类型?
所以,我想使用batchUpdate
命令在单个API 调用 中执行以下操作
- 添加一个新列。
A1:A2
为(使用A1 notation
) 处的列命名- 提供列值的格式
A2:A
(对于将落入此列的所有值。
我构建了我的 API 调用并按以下方式执行
curl -v \
-H 'Authorization: Bearer ya29.GlxUB-UnpiYLeMzdAYyz_kVvNIVwmlMvxauAfiklslphd60INbgOQEr2eUwdx4smOSirde63hW2CvR17AMfj1P5iGw1Q3dRgGBHGZ92JKoFWozSxjbJh0wEZJKvDUQ' \
-H 'Content-Type: application/json' \
-d '{
"requests": [
{
"insertDimension": {
"range": {
"sheetId": 2052094881,
"dimension": "COLUMNS",
"startIndex": 0,
"endIndex": 1
}
}
},
{
"repeatCell": {
"range": {
"sheetId": 2052094881,
"startRowIndex": 0,
"endRowIndex": 1,
"startColumnIndex": 0,
"endColumnIndex": 1
},
"cell": {
"userEnteredValue": {
"stringValue": "discretionary"
}
},
"fields": "userEnteredValue.stringValue"
}
},{
"repeatCell": {
"range": {
"sheetId": 2052094881,
"startRowIndex": 1,
"startColumnIndex": 1,
},
"cell": {
"userEnteredFormat": {
"numberFormat": {
"type": "DATE_TIME",
"pattern": "dddd, m/d/yy at h:mm"
}
}
},
"fields": "userEnteredFormat.numberFormat"
}
},
],
}' \
https://sheets.googleapis.com/v4/spreadsheets/1mHrPXQILuprO4NdqTgrVKlGazvvzgCFqIphGdsmptD8:batchUpdate
这似乎工作正常,因为我可以在索引处看到一个新列,0
并且A
API 响应也很好
< HTTP/2 200
< content-type: application/json; charset=UTF-8
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< date: Mon, 29 Jul 2019 20:09:29 GMT
< server: ESF
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< alt-svc: quic=":443"; ma=2592000; v="46,43,39"
< accept-ranges: none
<
{
"spreadsheetId": "1mHrPXQILuprO4NdqTgrVKlGazvvzgCFqIphGdsmptD8",
"replies": [
{},
{},
{}
]
}
* Connection #0 to host sheets.googleapis.com left intact
因此,我想验证如果现在我将任何值放入此列(从 开始A2
),格式dddd, m/d/yy at h:mm
将被应用。所以我插入了一个类似于以下命令的值
curl -v \
-H 'Authorization: Bearer ya29.GlxUB3ad1mGpbFBT1raZx2C76kmiSPBDX6_epAWNd3hwWC7EMtzgVBPB34JAK543N7g2Y1cYeFc_VWjTpmeU7LSE4nDGiyCUafqhqPTJHUg5UmrfjVxH5pcmeJXK4Q' \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"valueInputOption": "USER_ENTERED",
"data": [
{
"range": "Sheet1!A2:A3",
"majorDimension": "COLUMNS",
"values": [
["7/29/2019 12:56:31"]
]
}
]
}' \
https://sheets.googleapis.com/v4/spreadsheets/1mHrPXQILuprO4NdqTgrVKlGazvvzgCFqIphGdsmptD8/values:batchUpdate
当我执行时,响应似乎很好
< HTTP/2 200
< content-type: application/json; charset=UTF-8
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< date: Mon, 29 Jul 2019 20:09:58 GMT
< server: ESF
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< alt-svc: quic=":443"; ma=2592000; v="46,43,39"
< accept-ranges: none
<
{
"spreadsheetId": "1mHrPXQILuprO4NdqTgrVKlGazvvzgCFqIphGdsmptD8",
"totalUpdatedRows": 1,
"totalUpdatedColumns": 1,
"totalUpdatedCells": 1,
"totalUpdatedSheets": 1,
"responses": [
{
"spreadsheetId": "1mHrPXQILuprO4NdqTgrVKlGazvvzgCFqIphGdsmptD8",
"updatedRange": "Sheet1!A2",
"updatedRows": 1,
"updatedColumns": 1,
"updatedCells": 1
}
]
}
但是,当我从浏览器查看工作表时,文字值7/29/2019 12:56:31
是可用的。我发现这不正确,因为我预计格式dddd, m/d/yy at h:mm
已应用
我正在寻找以下问题的答案
- 首先,我在这里做错了什么?- 我该如何解决这个问题?
- 使用浏览器视图查看列时如何知道列的格式?
非常感谢您阅读到这里!
解决方案
- 您想知道为什么使用“values:batchUpdate”方法放置的值没有格式化。
- 您想了解修改格式的方法。
- 您想在浏览器视图中看到上面的内容。
如果我的理解是正确的,这个答案怎么样?
问题 1 的答案:
我认为在您的问题 1 中,有 2 个问题。
问题一:
从您的第一个 curl 命令中,我认为 gridrange 的索引不正确。在您的问题中,您正在尝试进行以下更新。
- 您想在“A”列的左侧插入一个新列。
- 您想为
discretionary
插入列的第 1 行设置一个值(在这种情况下,它是“A”列)。 - 您想为插入的列设置
dddd, m/d/yy at h:mm
as的数字格式。DATE_TIME
在这种情况下,在 curl 命令的 3 个请求中,第一个和第二个请求是正确的。但是第三个请求有问题。第三个请求的请求体如下。
{
"repeatCell": {
"range": {
"sheetId": 2052094881,
"startRowIndex": 1,
"startColumnIndex": 1 <--- here
},
"cell": {
"userEnteredFormat": {
"numberFormat": {
"type": "DATE_TIME",
"pattern": "dddd, m/d/yy at h:mm"
}
}
},
"fields": "userEnteredFormat.numberFormat"
}
}
1
和1
分别用于startRowIndex
和startColumnIndex
。这意味着来自单元格“B1”的所有单元格。这样,放入“A2:A3”的值将values:batchUpdate
被放入单元格而不进行格式化。这是第一个问题的原因。
作为解决方案,请使用1
和0
分别用于startRowIndex
和startColumnIndex
。通过这种方式,格式反映到“A”列。
问题 2:
当7/29/2019 12:56:31
由values:batchUpdate放时,格式似乎被覆盖了。这样,上面设置的格式就不能反映了。此外,电子表格的日期和时间由序列号管理。这些是第二个问题的原因。
作为解决方案,请使用序列号。当7/29/2019 12:56:31
转换为序列号时,它变为43675.54
。当它用于您的以下 curl 命令时,它变为如下。
curl \
-H 'Authorization: Bearer ###' \
-H 'Content-Type: application/json' \
-X POST \
-d '{"valueInputOption":"USER_ENTERED","data":[{"range":"Sheet1!A2:A3","majorDimension":"COLUMNS","values":[[43675.54]]}]}' \
https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchUpdate
- 请将 的值设置
43675.54
为数字。所以请不要用双引号和单引号括起来。由此,43675.54
用作带有 的数字USER_ENTERED
。 - 在这种情况下,当运行此 curl 命令时,您可以看到格式化的值已放入浏览器的单元格中。
问题 2 的答案:
我认为问题1的答案也可以回答问题2的答案。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- angular - Angular 7选择标签默认选项值问题
- aria2 - 'aria2: : DHKeyExchange 的初始化没有匹配的构造函数
- java - 如何创建多个相同的对象来追逐单个对象 [Java]
- python - Python 无法解码具有大于 127 的键的 XORed 字符串
- c# - 来自异步工作器的 UWP 更新 UI
- c - clock_settime 向后校正
- haskell - 如何在网页加载时加载 Haskell 脚本
- bash - 设置一个变量等于包含非命令词的命令的输出
- python - pandas - 无法合并 df/series 和 groupby 然后计数
- javascript - 当对象存在于命名函数中时如何访问外部对象