"setOwner "不是一个函数错误 - App Script

问题描述 投票:0回答:1

我是Google Scripts的新手,我在Stack Overflow上也看了其他帖子,但找不到好的答案。

我使用在Google Sheets中收集的数据来搜索Google Drive中的文件并转移文件的所有权。我有我的用户填写的google表格,一旦提交使用一个附加组件,我创建一个文件,基于数据提交的形式。现在的脚本,我试图去收集某些信息的表,如姓名,电子邮件和公司名称 - 。样本数据图像在此.

我目前所拥有的。

function myFunction() {
//Get google sheets
  var spreadsheetId = '1WvIIoYdmuIB5BQ3KgSYOOIiEn-K_GTzCkb7rITzRFck';
  //get certain values from sheets
  var rangeName = 'MDP Form!C25:E';
  var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
  if (!values) {
    Logger.log('No data found.');
  } else {
    Logger.log('Name, Email, Customer:');
    for (var row = 0; row < values.length; row++) {
      // Print columns C and E, which correspond to indices 0 and 4.
      Logger.log('Name: %s, Email: %s, Company: %s', values[row][0], values[row][1], values[row][2]);
      //Utilities.sleep(90000);
      //Searching through google drive 
      var name = (values[row][0]);
      var email = (values[row][1]);
      Logger.log(email);
      var company = (values[row][2]);
      var fileName = ('Mutual Delivery Plan ' + company + ' - ' + name);
      Logger.log(fileName);
      //add a 1 minute delay
      //Utilities.sleep(90000);
      //search for target folder
      var folder = DriveApp.getFolderById('1whvRupu9hWdyl2CqSF-KvdVj8VE6iiQu');
      //search for file by name within folder
      var mdpFile = folder.searchFiles(fileName);
      //transfer ownership
      mdpFile.setOwner(email);

    }
  }
}

问题:

除了最后一行 "setOwner "不是一个函数外,大部分脚本都能正常工作。我试着为它创建一个单独的函数,并使用了其他帖子中的一些建议,但仍然不能让它工作。如果有人有什么想法,我可能在这里遗漏了什么,或者有什么建议,那将是非常有帮助的。谢谢

google-apps-script scripting google-drive-api google-sheets-api google-docs-api
1个回答
2
投票

我相信你的目标如下。

  • 你想转移文件的所有者,当文件与 fileName 见于 folder.

对于这个问题,这个答案怎么样?

修改点。

虽然你说 The script works for the most part except for the last line "setOwner" is not a function.,如果你问题中的脚本是当前的脚本,那么下面的修改如何?

  • 在你的脚本中。fileName'Mutual Delivery Plan ' + company + ' - ' + namefileName 是与 var mdpFile = folder.searchFiles(fileName);. 在这种情况下,就会出现错误。因为 paramssearchFiles(params) 必须是查询字符串。
    • 我想,在你的情况下,它应该是 "title='" + fileName + "'".
  • searchFiles(fileName) 返回 FileIterator. 这一点已经由 现有答案. 因为在Google Drive中,相同的文件名可以存在于同一个文件夹中,而且每个文件都由唯一的ID管理。所以这里需要修改如下。
    • 我认为,对于你的情况,下面的流程是有用的。
      1. 确认文件是否存在,使用 hasNext().
      2. 当文件已经存在且所有者为您时,文件的所有者将被更改为: 。email.

当以上几点反映到您的脚本中时,请按以下方式修改。

修改后的剧本。

发件人:
var mdpFile = folder.searchFiles(fileName);
//transfer ownership
mdpFile.setOwner(email);
发件人: 收件人:
var mdpFile = folder.searchFiles("title='" + fileName + "'");
while (mdpFile.hasNext()) {
  var file = mdpFile.next();
  if (file.getOwner().getEmail() == Session.getActiveUser().getEmail()) {
    file.setOwner(email);
  }
}
  • 如果你不需要确认所有者是否是你,请删除。if (file.getOwner().getEmail() == Session.getActiveUser().getEmail()) {.

注意:在这种情况下,当文件名为

  • 在这种情况下,当文件的文件名为 fileName 不存在于 folder,if语句中的脚本没有运行。请注意这一点。
  • 另外,当在一个文件中,有几个文件名相同的时候,在 folder的所有者改为 email.

参考文献。


1
投票

Folder.searchFiles() 返回一个fileIterator而不是一个文件。 如果它是唯一一个使用该名称的文件,那么你通常可以使用 mdpFile.next();

文件迭代器

© www.soinside.com 2019 - 2024. All rights reserved.