Не могу изменить XLSX, существующий на Google диске

#python #google-api #google-sheets-api #xlsx #gspread

#python #google-api #google-sheets-api #xlsx #gspread

Вопрос:

Я успешно загрузил файл .xlsx со своего локального компьютера на Google диск, используя эту простую функцию. Используемый мной mimetype должен преобразовать .xlsx в обычный Google sheet

 def writeToGDrive(filename):
    file_metadata = {'name': filename,'parents': [FOLDER_ID]}
    media = MediaFileUpload(filename,mimetype='application/vnd.openxmlformats- 
    officedocument.spreadsheetml.sheet', resumable=True)
    file = service.files().create(body=file_metadata,media_body=media,fields='id').execute()
    return file.get('id')
  

но когда я пытаюсь читать или редактировать

 mySpread=service_sheet.spreadsheets().get(spreadsheetId=spreadSheet_Id).execute()
  

Это выдает мне эту ошибку

возвращено «Эта операция не поддерживается для этого документа»>

Также при попытке использовать gspread это выдает мне эту ошибку

gspread.исключения.Ошибка ApiError: {‘code’: 400, ‘message’: ‘Эта операция не поддерживается для этого документа’, ‘status’: ‘FAILED_PRECONDITION’}

Я хочу отредактировать этот файл .xlsx на Google диске, а затем снова экспортировать его как .xlsx на локальный диск

Ответ №1:

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

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

Точка модификации:

  • В этом случае, как насчет включения mimeType электронной таблицы Google в метаданные файла?

Модифицированный скрипт:

Пожалуйста, измените следующим образом и протестируйте его снова.

От:

 file_metadata = {'name': filename,'parents': [FOLDER_ID]}
  

Для:

 file_metadata = {'name': filename, 'parents': [FOLDER_ID], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
  
  • С помощью вышеуказанного изменения возвращенный идентификатор файла может использоваться в качестве электронной таблицы Google.

Примечание:

  • Когда вы экспортировали его как файл XLSX, пожалуйста, используйте метод «Файлы: экспорт» следующим образом.

       request = service.files().export_media(fileId=fileId, mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
      fh = io.FileIO('exportedSample.xlsx', mode='wb')
      downloader = MediaIoBaseDownload(fh, request)
      done = False
      while done is False:
          status, done = downloader.next_chunk()
          print('Download %d%%.' % int(status.progress() * 100))
      

Ссылки:

Комментарии:

1. @Hanna Nabil Спасибо за ответ. Я рад, что ваша проблема была решена.