将转换xls添加到Google工作表功能,以便下载

时间:2017-04-14 07:14:00

标签: google-apps-script google-sheets google-drive-api

我有工作代码可以通过链接下载谷歌文档中的任何文件。大多数xlx或xlsx格式的文件需要在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 个答案:

答案 0 :(得分:1)

为了将Excel转换为电子表格,DriveApp无法执行此操作。因此必须使用Drive API。您可以使用高级Google服务中的Drive API v2。 " Drive API v2"可以通过启用高级Google服务的Drive API和Google API控制台在Google Apps脚本中使用。

如何使用它如下。

  1. 在脚本编辑器中,选择Resources>高级Google服务

  2. 在显示的对话框中,点击Drive API v2的开/关开关。

  3. 在对话框底部,点击Google API控制台的链接。

  4. 在控制台中,点击过滤器框并输入API名称的一部分" Drive API",然后在看到后点击该名称。

  5. 在下一个屏幕上,单击“启用API”。

  6. 关闭开发人员控制台并返回脚本编辑器。在对话框中单击“确定”。您启用的高级服务现在可以自动填充。

  7. 详细信息为https://developers.google.com/apps-script/guides/services/advanced

    在示例脚本中,首先,文件由fileURL下载,即Excel文件,作为blob。 blob数据使用Drive API上传到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 ##
    ]
    

    如果我误解了你的问题,我很抱歉。