Как загрузить таблицу Excel в Документах Google с Gspread и получить доступ к данным локально (обозначение A1)? - PullRequest
0 голосов
/ 14 июля 2020

Мне нужно загрузить таблицу Excel из Google Docs через Gspread, а затем несколько раз мне нужно будет прочитать значения разных ячеек в нотации 'A1' . Таким образом, я не могу просто получить электронную таблицу и затем вызвать val = worksheet.acell('B1').value, потому что сценарий зависнет из-за слишком большого количества вызовов API. Мое решение на данный момент:

def download_hd_sheet():
    worksheet = gc.values().get(spreadsheetId=excel_id, range='variables', valueRenderOption='FORMULA').execute()['values']
    df = pd.DataFrame(worksheet)
    writer = pd.ExcelWriter("Variables.xlsx", engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False, header=False)
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    writer.save()
    book = openpyxl.load_workbook('Variables.xlsx', data_only=False)
    global hd_sheet
    hd_sheet = book.active

Пока что я делаю:

  1. Я загружаю значения из рабочего листа.
  2. Преобразуйте его (список списков) в pandas фрейм данных.
  3. Затем я записываю df в файл .xlsx.
  4. Я читаю файл .xlsx в глобальную переменную

Мне кажется, что я делаю так много всего лишь для того, чтобы добиться чего-то, что можно сделать двумя строками. Пожалуйста, дайте мне знать, что было бы эффективнее, чем указано выше.

1 Ответ

0 голосов
/ 15 июля 2020

Я считаю, что ваша цель следующая.

  • Вы хотите загрузить электронную таблицу Google как данные XLSX.
  • Вы хотите использовать загруженные данные XLSX без сохранения в виде файла .
  • Вы уже могли получать и помещать значения для Google Spreadsheet с помощью gspread.
  • Вы хотите добиться этого, используя python.

По порядку Для достижения вашей цели я хотел бы предложить следующий алгоритм.

  1. Загрузите электронную таблицу Google как данные XLSX, используя метод файлов: экспорт в Drive API.
  2. Откройте Данные XLSX с использованием загруженных двоичных данных с openpyxl.load_workbook().

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

В этом примере сценария в вашей ситуации токен доступа используется из авторизации для gspread.

spreadsheetId = "###"  # Please set the Spreadsheet ID.

client = gspread.authorize(credentials)
access_token = client.auth.token
url = "https://www.googleapis.com/drive/v3/files/" + spreadsheetId + "/export?mimeType=application%2Fvnd.openxmlformats-officedocument.spreadsheetml.sheet"
res = requests.get(url, headers={"Authorization": "Bearer " + access_token})
book = openpyxl.load_workbook(filename=BytesIO(res.content), data_only=False)
hd_sheet = book.active
  • По приведенному выше сценарию данные XLSX загружаются напрямую из Google Spreadsheet, а openpyxl.load_workbook

  • В этом случае следующие библиотеки кроме широко распространены также

      import openpyxl
      import requests
      from io import BytesIO
    

Примечание:

  • В этом случае укажите объем https://www.googleapis.com/auth/drive или https://www.googleapis.com/auth/drive.readonly. Когда вы изменили области действия, повторно авторизуйте области действия. Таким образом, новые области отражаются в токене доступа. Так что будьте осторожны.

Ссылки:

...