【问题标题】:Google Sheets API appending extra apostropheGoogle Sheets API 附加了额外的撇号
【发布时间】:2019-09-30 18:53:08
【问题描述】:

几个月来,我一直在 Python 中使用这个 Google Sheets API 代码将数据附加到电子表格,但它最近坏了。谁能看出这有什么问题?

body = {'values': [['2019-9-1', '41']]}
result = service.spreadsheets().values().append(spreadsheetId=SPREADSHEET_ID,valueInputOption='RAW', body=body, range='A:Z').execute()

它创建这样的单元格,每个单元格值之前都有一个撇号:

+----+-----------+-----+
|    |     A     |  B  |
+----+-----------+-----+
| 33 | '2019-9-1 | '41 |
+----+-----------+-----+

这是结果:

{'spreadsheetId': 'xxxxxxxxx', 'tableRange': 'data!A1:U32', 'updates': {'spreadsheetId': 'xxxxxxxxxx', 'updatedRange': 'data!A33:B33', 'updatedRows': 1, 'updatedColumns': 2, 'updatedCells': 2}}

【问题讨论】:

  • 撇号是谷歌表格(以及一般的电子表格)表示文本单元格的方式;行为是正确的。尝试传递日期或整数而不是文本

标签: python google-sheets-api


【解决方案1】:
  • 您希望将2019-9-141 的值分别作为日期对象和数字放到电子表格中。
    • 在当前情况下,结果变成'2019-9-1'41
  • 您想通过 Python 使用 google-api-python-client 来实现它。

如果我的理解是正确的,那么这次修改呢?

问题:

我认为您的问题的原因是由于valueInputOption='RAW'。当RAW设置为valueInputOption时,官方文档是这样说的。

用户输入的值不会被解析,会按原样存储。

由此,2019-9-141 被作为字符串类型。所以'被添加到字符的顶部。

解决办法:

为了将2019-9-141的值作为日期对象和数字,请进行如下修改。

从:
result = service.spreadsheets().values().append(spreadsheetId=SPREADSHEET_ID,valueInputOption='RAW', body=body, range='A:Z').execute()
到:
result = service.spreadsheets().values().append(spreadsheetId=SPREADSHEET_ID,valueInputOption='USER_ENTERED', body=body, range='A:Z').execute()
  • USER_ENTERED设置为valueInputOption时,官方文档是这样说的。

    这些值将被解析,就像用户在 UI 中键入它们一样。数字将保留为数字,但字符串可以转换为数字、日期等,遵循通过 Google 表格 UI 将文本输入单元格时应用的相同规则。

参考资料:

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

【讨论】:

  • 很好的答案,谢谢。我不知道撇号意味着字符串。在我的代码中,将数组值从 string 更改为 int 并保留 valueInputOption=RAW 会更容易。
  • @Elliott B 感谢您的回复。我很高兴你的问题得到了解决。电子表格.values.append 方法可以很容易地把值。因此,放置值的选项很简单。如果您想将值与详细设置一起放入,我认为您还可以使用电子表格.batchUpdate 方法的 AppendCellsRequest 请求。 Ref
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2017-05-07
相关资源
最近更新 更多