Impossibile modificare XLSX esistente su Google Drive
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
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