Я создал электронную таблицу с помощью Sheet APIv4. Когда я перечисляю каталог с помощью Drive APIv3, он показывает только []. Мои коды взяты с официальных (Google) сайтов. Я использую Python3.6 и Google Colaboratory.
from google.colab import auth
auth.authenticate_user()
from googleapiclient.discovery import build
sheet_service = build('sheets', 'v4')
drive_service = build('drive', 'v3')
Творчество:
spreadsheet_metadata = {'properties': {'title': 'Second spreadsheet2'},
'sheets': [
{
'properties': {
'title': 'First Sheet',
'gridProperties' : {
'columnCount': 6,
'rowCount': 11,
'frozenRowCount': 1
}
}
},
{
'properties': {
'title': 'Second Sheet',
'gridProperties': {
'columnCount': 4,
'rowCount': 8,
'frozenColumnCount': 2
}
}
}
]
}
spreadsheet = sheet_service.spreadsheets().create(body=spreadsheet_metadata).execute()
spreadsheet_id = spreadsheet['spreadsheetId']
print('Created "%s"' % spreadsheet['properties']['title'])
print('Spreadsheet ID: {0}'.format(spreadsheet.get('spreadsheetId')))
Это приводит к
Created "Second spreadsheet2"
Spreadsheet ID: 1fqreW1y3fcdaJmQWS1j25OMKaFjf90XfO38WB4ZIqIM
Листинг:
page_token = None
while True:
response = drive_service.files().list(q = "mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'",
spaces='drive',
fields='nextPageToken, files(id, name)',
pageToken=page_token).execute()
for file in response.get('files', []):
# Process change
print('Found file: %s (%s)' % (file.get('name'), file.get('id')))
page_token = response.get('nextPageToken', None)
if page_token is None:
break
Это приводит к:
[]
Так как листинг работает хорошо (много раз проверял), думаю проблема в не правильном spreadsheet_metadata. Чего-то не хватает, но я понятия не имею чего. Надеюсь, у кого-то больше практики. Спасибо.
Обновлять Благодаря комментарию @Tanaike я обнаружил свое непонимание. Google строго различает файлы Excel xlsx и файлы Google «xlsx». Поэтому, если кто-то хочет справиться с ними вместе, одним из решений будет использование
" mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' or
mimeType='application/vnd.google-apps.spreadsheet'"
в запросе, но я не знаю, вызовет ли это другие проблемы позже. Поскольку у меня всего несколько файлов, возможно, я конвертирую Excel xlsx в формат Google «xlsx», учитывая только один тип файлов, который проще (для меня).
@Tanaike Спасибо. да. "Почти" да. Пожалуйста, дайте это как ответ, я хотел бы принять его. После того, как вы это сделаете, я обновлю свой вопрос, потому что теперь я понимаю причины. Я думаю, что это похоже на ошибку поведения Google Drive API v3. Как вы думаете, это должен быть отчет? Я знаю обходной путь для этой проблемы, я напишу его в обновленном вопросе. Пожалуйста, прочтите его, если у вас есть идеи, задавайте вопросы, комментируйте. Я хочу, чтобы другие пользователи нашли полезную и правильную информацию.
Спасибо за ответ. Можете ли вы обновить свой вопрос? Я хотел бы подтвердить «ошибочное поведение Google Drive API v3» и подумать об этом. И я хотел бы опубликовать ответ и комментарий, резюмируя их.
@Tanaike Обновлено. Может быть, вместо «похожий на ошибку» лучше было бы сказать «не очень удобный для пользователя». Но помня об этом, все работает хорошо.
Спасибо за обновление. Я думаю, что ваш дополнительный запрос подходит как метод для получения как файлов Excel, так и файлов Google Spreadsheet. Например, если количество файлов стало большим, как насчет разделения вызовов API для каждого mimeType? Кстати, опубликуйте это как ответ и примите его. Я рад, что ваша проблема была решена.





application/vnd.openxmlformats-officedocument.spreadsheetml.sheet— это mimeType файла xlsx. Если вы хотите получить электронную таблицу, как насчет использованияapplication/vnd.google-apps.spreadsheetдля поискового запроса? Я не уверен, что это то, что вы хотите. Поэтому я спросил это в качестве комментария.