![](/img/trans.png)
[英]Is there a way to unmerge Google Sheets cells with gspread or some other Python library?
[英]python (gspread) - whole data table placed in one cell of my Google Sheets instead of separate cells
我的目标是通过用我自己的数据表(即针对类属性的实例表)替换其第一个工作表的内容来更新 Google 表格文档。 我曾尝试使用模块 gspread 来执行此操作,但效果并不理想:如果我运行该行
client.open("GoogleSheetName").sheet1.update('A1:R181',Member.display().to_json())
(其中 Member 是我的 class,而 display() 是我自己的 class 方法,它只是将我的数据转换为 pandas dataFrame object。),整个Member.display().to_json()
字符串都放在单元格 A1 中,就像它永远不会解压缩,只是作为一根字符串保留。 如果我使用 json 模块并使用json.dumps(Member.display().to_dict())
转储我的数据,我会遇到同样的问题。
我还尝试将数据简单地更改为Member.display().to_dict()
,在这种情况下,我收到“ Invalid JSON payload received
”错误。
似乎数据可能需要采用矩阵格式才能工作,即[[..,..,..][..,..,..]...]
,因为这是唯一的格式在我的情况下工作正常。 我知道它有效,因为当我通过运行测试 API
client.open("GoogleSheetName").sheet1.update('A1:B2', [[1, 2], [3, 4]])
每个数字都根据需要放在自己单独的单元格中。 那是我必须使用的格式吗?
我该如何解决这个问题? 这就像我的数据需要发送 JSON 可读但不能是字符串否则它被解释为单个参数!
任何帮助将不胜感激。
正如官方表格 API 在方法中所说: spreadsheets.values.append 请求正文
请求正文包含一个 ValueRange 实例。
ValueRange是一个 JSON,它必须包含一个名为values的键,该键必须是 arrays 的数组。我根据Python 快速入门制作了以下示例,以向您展示如何将您想要的数据传递到电子表格。
service = discovery.build('sheets', 'v4', credentials=creds)
spreadsheet_id = 'YOUR-SHEETS-ID'
ranges = "A1:A"
value_render_option = "DIMENSION_UNSPECIFIED"
value_input_option = "USER_ENTERED"
df = pd.DataFrame({
'age': [ 3, 29],
'height': [94, 170],
'weight': [31, 115]
})
value_range_body = {
"values": df.to_numpy().tolist(),
"majorDimension": "DIMENSION_UNSPECIFIED"
}
request = service.spreadsheets().values()\
.append(spreadsheetId=spreadsheet_id, range=ranges, valueInputOption=value_input_option, body=value_range_body)
response = request.execute()
print(response)
如您所见,我正在使用df.to_numpy().tolist()
将 pandas dataframe 转换为 NumPy 数组,然后转换为正常的 Python 列表。
如果Member.display()
是 pandas DataFrame,您可以执行以下操作以使用 gspread 更新工作表:
df = Member.display()
ws = client.open("GoogleSheetName").sheet1
ws.update([df.columns.values.tolist()] + df.values.tolist())
有关将gspread 与 pandas 一起使用的其他示例在文档中。
边注:
当然,您可以使用 Alberto 指出的官方 API。 这完全取决于您的用例。 Google 表格 API 是较低级别的 API。功能非常强大,但需要更多样板代码。 如果比较这两个代码示例,您就会看到这一点。 这是一个权衡。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.