【问题标题】:Google Apps Script - get URL of File in Drive with File NameGoogle Apps 脚本 - 使用文件名获取驱动器中文件的 URL
【发布时间】:2018-08-31 23:59:13
【问题描述】:

我正在尝试在 Google 电子表格中创建一个表单,该表单将根据文件名从我的云端硬盘中提取一个图像文件并将其插入到单元格中。我读到您目前无法直接通过 Google 脚本执行此操作,因此我在目标单元格中​​使用 setFormula() 和 =IMAGE() 函数来插入图像。但是,我需要图像的 URL 才能执行此操作。我需要使用文件名来获取 URL,因为表单将唯一的数字 ID 连接到一个字符串中,以使用这些文件的标准化命名约定。我的问题是,当我使用 getFilesByName 时,它​​返回一个文件迭代,我需要一个文件才能使用 getUrl()。下面是我的代码的 sn-p,它当前返回错误“在对象 FileIterator 中找不到函数 getUrl。”

  var poNumber = entryFormSheet.getRange(2, 2);
  var proofHorizontal = drive.getFilesByName('PO ' + poNumber + ' Proof Horizontal.png').getUrl();

  packingInstructionsSheet.getRange(7, 1).setFormula('IMAGE(' + proofHorizontal + ')');

【问题讨论】:

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


    【解决方案1】:

    如果你知道确切的文件名,你可以使用DriveApp搜索文件和getUrl()

    function getFile(name) {
      var files = DriveApp.getFilesByName(name);
      while (files.hasNext()) { 
        var file = files.next();
        //Logs all the files with the given name
        Logger.log('Name:'+file.getName()+'\nUrl'+ file.getUrl());
      }
    }
    

    如果你不知道确切的名字,你可以使用DriveApp.searchFiles()方法。

    【讨论】:

    • 我正在尝试这个,但我没有得到任何作为文件 URL 返回的内容。这是我正在运行以测试它的代码的 sn-p;变量“poNumber”在上面声明: var drive = DriveApp; var proofHorizo​​ntal = drive.getFilesByName('PO' + poNumber + 'Proof Horizo​​ntal.png'); Logger.log(proofHorizo​​ntal); //获取图片文件地址 while (proofHorizo​​ntal.hasNext()) { var proofHorizo​​ntalUrl = proofHorizo​​ntal.next().getUrl(); Logger.log(proofHorizo​​ntalUrl);问题可能是只找到一个文件,所以“.hasNext”会是假的吗?
    • 你是对的。问题是我在 getFilesByName 字符串中连接的变量出错。这应该可以工作,现在我已经发现了这个错误。
    【解决方案2】:

    你已经接近了——一旦你有了FileIterator,你需要推进它以获得一个文件,即调用FileIterator.next()

    如果多个文件可以同名,您想要的文件可能不是第一个。我建议在你的脚本中检查一下,以防万一:

    var searchName = "PO + .....";
    var results = DriveApp.getFilesByName(searchName);
    var result = "No matching files";
    while (results.hasNext()) {
      var file = results.next();
      if (file.getMimeType() == MimeType. /* pick your image type here */ ) {
        result = "=IMAGE( .... " + file.getUrl() + ")");
        if (results.hasNext()) console.warn("Multiple files found for search '%s'", searchName);
        break;
      }
    }
    sheet.getRange( ... ).setFormula(result);
    

    您可以在documentation查看可用的MimeTypes

    【讨论】:

      猜你喜欢
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2014-04-03
      相关资源
      最近更新 更多