Задать вопрос
@Hikkimaru0_o

Почему программа не видит файл на Google drive?

import gspread
from oauth2client.service_account import ServiceAccountCredentials


def get_form_responses(form_name):
    credentials_path = r'C:\Users\Hikkimaru\Desktop\ProDviz\Work\Bot_lvl\.json'
    scope = ['https://spreadsheets.google.com/feeds',
             'https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        credentials_path, scope)
    client = gspread.authorize(credentials)
    print('Успешно авторизовано.')

    # Открываем форму по названию
    form = client.open(form_name).sheet1
    print('Google Forms открыт.')

    # Получаем все ответы на форму
    responses = form.get_all_values()
    print('Ответы получены.')

    return responses


def add_responses_to_sheet(responses, sheet_name, score):
    credentials_path = r'C:\Users\Hikkimaru\Desktop\ProDviz\Work\Bot_lvl\.json'
    scope = ['https://spreadsheets.google.com/feeds',
             'https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        credentials_path, scope)
    client = gspread.authorize(credentials)
    print('Успешно авторизовано.')

    # Создаем новую таблицу
    spreadsheet = client.create(sheet_name)
    print('Новая таблица создана.')

    # Получаем ссылку на новую таблицу
    sheet_url = spreadsheet.url

    # Открываем таблицу по ссылке
    sheet = client.open_by_url(sheet_url).sheet1
    print('Google Sheets открыт.')

    # Получаем текущие баллы из третьего столбца таблицы
    current_scores = sheet.col_values(3)
    # Вычисляем новые баллы, добавляя score к каждому текущему баллу
    new_scores = [str(int(score) + int(s)) for s in current_scores]
    print('Баллы обновлены.')

    # Получаем ответы на вопросы 1 и 2 из списка ответов
    question1_responses = [response[0] for response in responses]
    question2_responses = [response[1] for response in responses]

    # Обновляем таблицу с ответами и баллами
    for i in range(len(responses)):
        # Обновляем ячейку в первом столбце
        sheet.update_cell(i + 2, 1, question1_responses[i])
        # Обновляем ячейку во втором столбце
        sheet.update_cell(i + 2, 2, question2_responses[i])
        # Обновляем ячейку в третьем столбце
        sheet.update_cell(i + 2, 3, new_scores[i])
    print('Ответы успешно добавлены в Google Sheets.')


# Вводим название Google Forms, Google Sheets и количество баллов
form_name = input('Введите название Google Forms: ')
sheet_name = input('Введите название Google Sheets: ')
score = input('Введите количество баллов: ')

print('Получение ответов из Google Forms...')
responses = get_form_responses(form_name)

print('Добавление ответов в Google Sheets...')
add_responses_to_sheet(responses, sheet_name, score)

Я столкнулся с проблемой при использовании библиотеки gspread для доступа к форме на Google Drive. При попытке открыть форму с помощью функции client.open(form_name), возникает ошибка gspread.exceptions.SpreadsheetNotFound. Я уверен, что путь к форме указан правильно и сервисный аккаунт имеет соответствующие права доступа. Что я могу сделать, чтобы решить эту проблему и успешно получить доступ к форме на Google Drive?

до этого работал с API календаря там все было нормально
  • Вопрос задан
  • 183 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Так это либа для работы с таблицами, а вы ей пытаетесь открыть форму. Сразу закидывайте в неё ссылку на вашу таблицу, я уверен что она в любом случае меняться не будет. Даже если вдруг нужна гибкость в виде того что ссылка на таблицу должна браться из формы, то надо тогда уж или искать либу для работы с формами, либо самому через какие нибудь requests дернуть ссылку на таблицу из формы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы