Gspread如何复制sheet

Led*_*Led 4 python gspread google-sheets-api

在 Stackoveflow 上进行谷歌搜索和搜索后,我想我找不到有关如何复制现有工作表(现有模板工作表)并将其保存到另一张工作表中的指南。

根据文档,有重复的表,但我无法做一个工作示例,任何人都可以指导我吗?

 import gspread
 from gspread.models import Cell, Spreadsheet

 scope = [
 "https://www.googleapis.com/auth/spreadsheets.readonly",
 "https://www.googleapis.com/auth/spreadsheets",
 "https://www.googleapis.com/auth/drive.readonly",
 "https://www.googleapis.com/auth/drive.file",
 "https://www.googleapis.com/auth/drive",
 ]

 json_key_absolute_path = "key.json"
 credentials = ServiceAccountCredentials.from_json_keyfile_name(json_key_absolute_path, scope)
 client = gspread.authorize(credentials)

 spreadsheet_client = Spreadsheet(client)
 spreadsheet_client.duplicate_sheet("18Qk5bzuA7JOBD8CTgwvKYRiMl_35it5AwcFG2Bi5npo", new_sheet_name="timcard2")
 worksheet = client.open("timcard2")
 worksheet.share("my_email@google.com", perm_type='user', role='writer')
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 8

  • 您想要将源电子表格复制为新电子表格。
  • 您想使用 gspread 和 python 来实现这一点。
  • 您已经能够使用 Sheets API 获取和输入 Google 电子表格的值。

如果我的理解是正确的,这个答案怎么样?

问题及解决方案:

似乎duplicate_sheetgspread 方法用于将源电子表格中的工作表复制到同一源电子表格中。Ref为了将源电子表格复制为新电子表格,请使用copy()类客户端的方法。

示例脚本:

请按如下方式修改您的脚本。

从:
client = gspread.authorize(credentials)

spreadsheet_client = Spreadsheet(client)
spreadsheet_client.duplicate_sheet("18Qk5bzuA7JOBD8CTgwvKYRiMl_35it5AwcFG2Bi5npo", new_sheet_name="timcard2")
worksheet = client.open("timcard2")
worksheet.share("my_email@google.com", perm_type='user', role='writer')
Run Code Online (Sandbox Code Playgroud) 到:
client = gspread.authorize(credentials)
client.copy("18Qk5bzuA7JOBD8CTgwvKYRiMl_35it5AwcFG2Bi5npo", title="timcard2", copy_permissions=True)

worksheet = client.open("timcard2")
worksheet.share("my_email@google.com", perm_type='user', role='writer')
Run Code Online (Sandbox Code Playgroud)
  • 运行脚本时,电子表格 ID 为 的电子表格18Qk5bzuA7JOBD8CTgwvKYRiMl_35it5AwcFG2Bi5npo将被复制为电子表格名称timcard2。并且,源电子表格的权限信息也被复制。

笔记:

  • 在这种情况下,当copy_permissions=True使用 时,权限信息也会被复制。所以虽然我不确定你的实际情况,但可能不需要使用worksheet.share("my_email@google.com", perm_type='user', role='writer'). 请小心这一点。

参考:

添加:

  • 您想要复制 Google 电子表格中的一张工作表。

我可以像上面那样理解。为此,示例脚本如下。

示例脚本:

client = gspread.authorize(credentials)
client.copy("18Qk5bzuA7JOBD8CTgwvKYRiMl_35it5AwcFG2Bi5npo", title="timcard2", copy_permissions=True)

ss = client.open("timcard2")
ss.share("my_email@google.com", perm_type='user', role='writer')

delete_sheets = ["Sheet2", "Sheet3", "Sheet4"]  # Please set the sheet names you want to delete.
for s in delete_sheets:
    ss.del_worksheet(ss.worksheet(s))
Run Code Online (Sandbox Code Playgroud)
  • 在此示例中,从复制的电子表格中删除“Sheet2”、“Sheet3”、“Sheet4”工作表。

参考: