1

我想將我的代碼上傳到Google雲端硬盤時自動將xlsx文件轉換爲Google電子表格。然而,雖然轉換成功爲csv文件,我得到:如何在Google Drive API v3中將XLSX轉換爲表格

<HttpError 400 when requesting https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&alt=json returned "Bad Request"> 

當試圖上傳xlsx。

這裏是我的代碼:

def upload_service(filepath, name="", description="", fileID="", parentID=""): 
    """ Uses a Resource (service) object to upload a file to drive. """ 

    if service == "": authenticate_service() 

    if name == "": 
     name = str(os.path.basename(filepath).split(os.extsep)[0]) # Get from filepath 

    extension = str(os.path.basename(filepath).split(os.extsep)[1]).lower() 

    if extension == "csv":     # CSV 
     mime_type = "text/csv" 
    elif extension in ["xls", "xlsx"]:  # EXCEL 
     mime_type = "application/ms-excel" 
    else: 
     return 

    media_body = MediaFileUpload(filepath, mimetype=mime_type, resumable=True) 

    if parentID == "": 
     meta = dict(name=name, mimeType="application/vnd.google-apps.spreadsheet", description=description) 
    else: 
     meta = dict(name=name, mimeType="application/vnd.google-apps.spreadsheet", description=description, parents=[parentID]) 

    if fileID == "": # CREATE 
     upload = service.files().create(
            body=meta, 
            media_body=media_body).execute() 
    else: # REPLACE 
     upload = service.files().update(
           body=meta, 
           media_body=media_body, 
           fileId=fileID).execute() 

    print ("\nFINISHED UPLOADING") 

我怎樣才能做到這一點的V3?在v2中如何做到這一點非常明確,但不是在更新後的API中。

回答

4

在APIv3,你需要指定一個非常具體 MIME類型進行轉換的。

https://developers.google.com/drive/v3/web/manage-uploads#importing_to_google_docs_types_wzxhzdk8wzxhzdk9處,您會注意到「支持的轉換可在關於資源的importFormats陣列中動態獲得」。使用獲取importFormats列表或者

GET https://www.googleapis.com/drive/v3/about?fields=importFormats&key={YOUR_API_KEY}

或轉到https://developers.google.com/drive/v3/reference/about/get#try-it並進入importFormats

您將在響應通知:

"application/vnd.ms-excel": [ 
    "application/vnd.google-apps.spreadsheet" 
] 

在你的代碼,使用:

elif extension in ["xls", "xlsx"]:  # EXCEL 
    mime_type = "application/vnd.ms-excel" 

(注意額外的vnd.),它應該工作得很好!

+0

這對我有效! – Elliptica

0

根據Official Google Documentation,您收到400: Bad Request表示未提供必填字段或參數,提供的值無效或提供的字段組合無效。嘗試添加將在目錄圖形中創建循環的父項時,可能會引發此錯誤。

遇到此錯誤時,建議的操作是使用exponential backoff。它是網絡應用程序的標準錯誤處理策略,其中客戶端在日益增長的時間內定期重試失敗的請求。

您可以使用官方Google Docs供您參考,有一個參數convertconvert=true,將文件轉換爲相應的Google Docs格式(默認值:false)。

您還需要使用Python client library,您可以使用該庫支持上傳文件。

發現這個堆棧溢出票,檢查由社區提供的解決方案:python + google drive: upload xlsx, convert to google sheet, get sharable link

+0

您引用的參數是Google v2選項,而此問題涉及v3。 Google v3未提供該參數,並且[docs](https://developers.google.com/drive/v3/web/migration#notable_changes)建議的方法無效。 – Elliptica

相關問題