0

我有工作代碼可通過鏈接下載Google文檔中的任何文件。大多數xlx或xlsx格式的文件需要在Google表格類型中進行轉換。我一直試圖使用一些方法,我發現在互聯網上,但他們不爲我工作。在下面的代碼中,我會用我測試的代碼進行評論。我猜,這谷歌已經改變了一些文件添加將xls轉換爲Google工作表功能以下載功能

function downloadFile(fileURL,folder) { 

    var fileName = ""; 
    var fileSize = 0; 
    var fileId = ""; 

    var response = UrlFetchApp.fetch(fileURL, {muteHttpExceptions: true}); 
    var rc = response.getResponseCode(); 

    if (rc == 200) { 
    var fileBlob = response.getBlob() //.getAs(MimeType.GOOGLE_SHEETS) - get error 
    var folder = DriveApp.getFolderById(folder); 
    if (folder != null) { 
     var file = folder.createFile(fileBlob);//.getAs(MimeType.GOOGLE_SHEETS) - get error 
     fileName = file.getName(); 
     fileSize = file.getSize(); 
     fileId = file.getId(); 
    } 
    } 
    //file.setMimeType("application/vnd.google-apps.spreadsheet") - not work 
    //makeCopy('ssssss', folder, {convert: true}) - get error 

    var fileInfo = [ rc, fileName, fileSize, fileId ]; 
    return fileInfo; 
} 

我打電話的功能是這樣的:

downloadFile("http://www.beltools.ru/prais_rar/price%20TD%20RI.xls","0B_E2P3ZhQySBY3BBMzdlazBLcTA") 

回答

1

爲了到Excel轉換到電子表格,DriveApp不能做到這一點。所以必須使用Drive API。您可以使用高級Google服務中的Drive API v2。通過啓用高級Google服務的Drive API和Google API控制檯,可以在Google Apps腳本中使用「Drive API v2」。

如何使用它如下。

  1. 在腳本編輯器,選擇資源>高級谷歌服務

  2. 在出現的對話框中,單擊驅動器API v2中的on/off開關。

  3. 在該對話框的底部,單擊Google API控制檯的鏈接。

  4. 在控制檯中,單擊過濾器框並鍵入API「Drive API」名稱的一部分,然後單擊該名稱即可看到它。

  5. 在下一個屏幕上,單擊啓用API。

  6. 關閉Developers Console並返回到腳本編輯器。在對話框中單擊確定。您啓用的高級服務現在可用於自動完成。

詳細信息是https://developers.google.com/apps-script/guides/services/advanced

在示例腳本中,首先,文件是由作爲Blob的Excel文件fileURL下載的。使用雲端硬盤API將blob數據上傳到Google雲端硬盤。在這種情況下,訪問令牌不是必需的。對於downloadFile(),輸入數據和輸出數據與您的downloadFile()相同。文件名從fileURL中檢索。

腳本:

function downloadFile(fileURL, folder) { 
    var filename = fileURL.match(".+/(.+?)([\?#;].*)?$")[1]; 
    var response = UrlFetchApp.fetch(fileURL); 
    var rc = response.getResponseCode(); 
    var blob = response.getBlob(); 
    var resource = { 
    "mimeType": "application/vnd.google-apps.spreadsheet", 
    "parents": [{id: folder}], 
    "title": filename 
    }; 
    var res = Drive.Files.insert(resource, blob); 
    var fileInfo = [rc, res.title, blob.getBytes().length, res.id]; 
    return fileInfo; 
} 

結果:

[ 
    200, 
    sample.xlsx, 
    10000.0, 
    ## file id ## 
] 

如果我誤解你的問題,我很抱歉。

+0

是的!這是我所尋找的,非常感謝你!我只是不知道,爲什麼谷歌沒有這個簡單的功能。 – Davagaz

+0

歡迎。我很高興我能幫助你。 – Tanaike