首页 文章

Google Apps脚本 - 使用文件名获取 Cloud 端硬盘中的文件网址

提问于
浏览
0

我正在尝试在Google Spreadsheets中创建一个表单,该表单将根据文件名从我的驱动器中提取图像文件并将其插入单元格 . 我已经读过您目前无法通过Google Scripts直接执行此操作,因此我使用setFormula()和目标单元格中的= IMAGE()函数来插入图像 . 但是,我需要图像的URL才能执行此操作 . 我需要使用文件的名称来获取URL,因为表单将唯一的数字ID连接成一个字符串,以使用这些文件的标准化命名约定 . 我的问题是,当我使用getFilesByName时,它返回一个File Iteration,我需要一个File才能使用getUrl() . 下面是我的代码片段,它当前返回错误“无法在对象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 + ')');

2 回答

  • 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()方法 .

  • 0

    你已经关闭了 - 一旦你拥有了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

相关问题