Impossibile modificare XLSX esistente su Google Drive

Aug 29 2020

Ho caricato con successo .xlsx dal mio PC locale su Google Drive utilizzando questa semplice funzione. Il tipo MIME che sto usando dovrebbe convertire .xlsx in un normale foglio Google

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')

ma quando cerco di leggere o modificare

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

Mi dà questo errore

ha restituito "Questa operazione non è supportata per questo documento">

Anche quando ho provato a usare gspread mi dà questo errore

gspread.exceptions.APIError: {'code': 400, 'message': 'This operation is not supported for this document', 'status': 'FAILED_PRECONDITION'}

Voglio modificare questo .xlsx su Google Drive, quindi esportarlo di nuovo come .xlsx nell'unità locale

Risposte

Tanaike Aug 29 2020 at 06:00

Credo il tuo obiettivo come segue.

  • Vuoi caricare un file XLSX convertendolo come foglio di lavoro Google.
  • Vuoi ottenere questo risultato usando googleapis per python.

Punto di modifica:

  • In questo caso, che ne dici di includere il mimeType del foglio di calcolo di Google nei metadati del file?

Script modificato:

Modificare come segue e testarlo di nuovo.

A partire dal:
file_metadata = {'name': filename,'parents': [FOLDER_ID]}
Per:
file_metadata = {'name': filename, 'parents': [FOLDER_ID], 'mimeType': 'application/vnd.google-apps.spreadsheet'}
  • Con la modifica precedente, l'ID del file restituito può essere utilizzato come foglio di lavoro di Google.

Nota:

  • Quando lo hai esportato come file XLSX, utilizza il metodo "File: esporta" come segue.

      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))
    

Riferimenti:

  • File: crea
  • File: esporta