создать Google лист с несколькими листами - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь использовать Google Drive API для создания листов Google в указанную папку. Мой следующий код работает нормально, за исключением того, что я хотел бы создать файл с несколькими листами. Я пытался properties. Тем не менее, он по-прежнему отображается как Sheet1

file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet', }
google_sheets_metadata = self.__service.files().create(body=file_metadata).execute()

1 Ответ

2 голосов
/ 10 марта 2020
  • Вы хотите создать новую электронную таблицу в указанной папке c.
  • Вы хотите создать новую электронную таблицу, создав несколько рабочих листов.
  • Вы хотите добиться этого с помощью googleapis с python.
  • Вы уже можете использовать Drive API.

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

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

Drive API может напрямую создавать электронную таблицу. Но в этом случае электронную таблицу нельзя создать из нескольких листов. Поэтому в этом случае необходимо также использовать Sheets API.

Прежде чем использовать следующие сценарии, включите Sheets API. И, пожалуйста, добавьте https://www.googleapis.com/auth/spreadsheets в область видимости. В этом случае, пожалуйста, удалите файл учетных данных (token.pickle), включая токен доступа и refre sh, и повторите авторизацию. Этим отражаются новые возможности. Пожалуйста, будьте осторожны с этим.

Шаблон 1:

В этом шаблоне после создания электронной таблицы в заданной папке c с использованием метода создания API-интерфейса накопителя в нее добавляются 2 рабочих листа. создал электронную таблицу, используя метод batchUpdate of Sheets API.

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

sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)

google_folder_id = '###'
file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
google_sheets_metadata = drive.files().create(body=file_metadata).execute()
fileId = google_sheets_metadata['id']
body = {"requests": [{"addSheet": {}}, {"addSheet": {"properties": {"title": "sampleSheet"}}}]}
res = sheets.spreadsheets().batchUpdate(spreadsheetId=fileId, body=body).execute()
print(res)
  • В этом случае 3-е имя листа sampleSheet в качестве образца.

Шаблон 2:

В этом шаблоне после создания электронной таблицы в папке root с 3 рабочими листами с использованием метода создания Sheets API созданная электронная таблица перемещается в указать папку c с использованием метода обновления Drive API.

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

sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)

google_folder_id = '###'
body = {"properties": {"title": "sampleSpreadsheet"}, "sheets": [{}, {}, {"properties": {"title": "sampleSheet"}}]}
res = sheets.spreadsheets().create(body=body).execute()
spreadsheetId = res['spreadsheetId']
google_sheets_metadata = drive.files().update(fileId=spreadsheetId, removeParents='root', addParents=google_folder_id).execute()
  • В этом случае имя 3-го листа sampleSheet в качестве образца .

Примечание:

  • В приведенных выше сценариях предполагается, что ваш сценарий для авторизации работает.

Ссылки:

Если я неправильно понял ваш вопрос и это было не то направление, которое вы хотите, я прошу прощения.

Добавлено:

Когда вы хотите использовать шаблон 1, и вы хотите дать листу имена "a" и "b" для 1-й и 2-й вкладок сценарий выглядит следующим образом.

Когда новая электронная таблица создается с помощью Drive API, созданная электронная таблица имеет первую вкладку. Поэтому в вашем случае необходимо переименовать 1-й лист в «a» и добавить один лист с именем «b».

sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)

google_folder_id = '###'
file_metadata = {'properties': {'title': 'test title'}, 'name': 'google sheets filename', 'parents': [google_folder_id], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
google_sheets_metadata = drive.files().create(body=file_metadata).execute()
fileId = google_sheets_metadata['id']

title = [{"addSheet": {"properties": {"title": name}}} for name in set(['b'])]
title.append({"updateSheetProperties": {"fields": "title", "properties": {"title": "a", "index": 0}}})
body = {"requests": title}
res = sheets.spreadsheets().batchUpdate(spreadsheetId=fileId, body=body).execute()
print(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...