Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 添加转换xls到谷歌表功能,以下载功能_Google Apps Script_Google Sheets_Google Drive Api - Fatal编程技术网

Google apps script 添加转换xls到谷歌表功能,以下载功能

Google apps script 添加转换xls到谷歌表功能,以下载功能,google-apps-script,google-sheets,google-drive-api,Google Apps Script,Google Sheets,Google Drive Api,我有通过链接下载谷歌文档中任何文件的工作代码。大多数文件为xlx或xlsx格式,需要转换为google sheets类型。我尝试过使用一些我在网上找到的方法,但它们对我不起作用。在下面的代码中,我用我测试的代码进行注释。我猜,谷歌已经改变了一些文档 function downloadFile(fileURL,folder) { var fileName = ""; var fileSize = 0; var fileId = ""; var response = UrlF

我有通过链接下载谷歌文档中任何文件的工作代码。大多数文件为xlx或xlsx格式,需要转换为google sheets类型。我尝试过使用一些我在网上找到的方法,但它们对我不起作用。在下面的代码中,我用我测试的代码进行注释。我猜,谷歌已经改变了一些文档

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

为了将Excel转换为电子表格,DriveApp无法执行此操作。因此,必须使用驱动API。您可以使用高级谷歌服务。通过启用高级谷歌服务和谷歌API控制台的驱动API,“驱动API v2”可以在谷歌应用程序脚本中使用

使用方法如下

  • 在脚本编辑器中,选择资源>高级谷歌服务

  • 在出现的对话框中,单击驱动器API v2的开/关开关

  • 在对话框底部,单击GoogleAPI控制台的链接

  • 在控制台中,单击过滤器框并键入API名称的一部分“驱动API”,然后在看到该名称后单击该名称

  • 在下一个屏幕上,单击启用API

  • 关闭开发者控制台并返回脚本编辑器。在对话框中单击“确定”。您启用的高级服务现在在autocomplete中可用

  • 详细信息如下所示

    在示例脚本中,首先,
    fileURL
    下载一个文件,它是一个Excel文件,作为blob。blob数据使用驱动API上传到Google Drive。在这种情况下,不需要访问令牌。对于
    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 ##
    ]
    
    结果:

    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 ##
    ]
    

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

    是的!这就是我一直在寻找的,非常感谢!我只是不明白,为什么谷歌没有这个简单的功能。欢迎。我很高兴能帮助你。