GSПрочитайте, как дублировать лист - PullRequest
1 голос
/ 08 апреля 2020

После поиска в Google и поиска в Stackoveflow, я думаю, что не могу найти руководство о том, как скопировать существующий лист (существующий шаблон) и сохранить его на другом листе.

согласно документам, есть duplicate_sheet но я не могу сделать рабочий пример, кто-нибудь, кто может мне помочь с этим?

 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')

1 Ответ

1 голос
/ 08 апреля 2020
  • Вы хотите скопировать исходную электронную таблицу как новую электронную таблицу.
  • Вы хотите добиться этого с помощью gspread с python.
  • Вы уже смогли получить и поставить значения для Google Spreadsheet с использованием API Sheets.

Если я правильно понял, как насчет этого ответа? Пожалуйста, подумайте об этом, как об одном из нескольких возможных ответов.

Проблема и решение:

Похоже, что метод размножения duplicate_sheet используется для копирования листа в исходной электронной таблице в ту же таблицу. Исходная таблица. Ссылка Чтобы скопировать исходную электронную таблицу как новую электронную таблицу, пожалуйста, используйте метод copy() Class Client.

Пример сценария:

Измените сценарий следующим образом.

С:
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')
Кому:
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')
  • При запуске сценария в качестве имени электронной таблицы копируется электронная таблица с идентификатором 18Qk5bzuA7JOBD8CTgwvKYRiMl_35it5AwcFG2Bi5npo. timcard2. И информация о разрешениях исходной электронной таблицы также копируется.

Примечание:

  • В этом случае, когда используется copy_permissions=True, информация о разрешениях также копируется , Поэтому, хотя я не уверен в вашей реальной ситуации, может не потребоваться использование worksheet.share("my_email@google.com", perm_type='user', role='writer'). Пожалуйста, будьте осторожны.

Ссылки:

Добавлено:

  • Вы хотите скопировать один из листов в Google Spreadsheet.

Я могу понять как над. Для этого пример сценария выглядит следующим образом.

Пример сценария:

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))
  • В этом примере листы "Лист2", "Лист3", "Лист4" удалено из скопированной таблицы.

Ссылка:

...