“ setOwner”不是函数错误-App脚本

SS123

是Google脚本的新功能,我也浏览了Stack Overflow上的其他帖子,但找不到合适的答案。

我正在使用从Google表格中收集的数据来搜索Google云端硬盘中的文件并转移文件的所有权。我使用我的用户填写的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”不是函数。我尝试为此创建一个单独的函数,在其他帖子上使用了一些其他建议,但仍然无法使它正常工作。如果有人对我可能在这里遗漏了什么有什么想法,或者有什么建议会很有帮助。谢谢!

Tanaike

我相信您的目标如下。

  • fileName中找到具有的文件时,您想转移文件的所有者folder

为此,这个答案如何?

修改要点:

虽然您说的是The script works for the most part except for the last line "setOwner" is not a function.,但如果问题中的脚本是当前脚本,则如何进行以下修改?

  • 在您的脚本fileName'Mutual Delivery Plan ' + company + ' - ' + name,和fileName与一起使用var mdpFile = folder.searchFiles(fileName);在这种情况下,将发生错误。由于paramssearchFiles(params)要求是查询字符串。
    • 我认为您的情况是"title='" + fileName + "'"
  • searchFiles(fileName)返回FileIterator现有答案已经提到了这一点因为在Google云端硬盘中,相同的文件名可以存在于同一文件夹中,并且每个文件都由唯一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

参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

.autocomplete不是函数错误

来自分类Dev

TypeError:$(...)。dialog不是函数错误

来自分类Dev

angularjs对象不是函数错误

来自分类Dev

sequelize .create不是函数错误

来自分类Dev

调用脚本时出现Google App脚本关闭错误

来自分类Dev

React DND,connectDragSource不是函数错误

来自分类Dev

addEventListener不是函数错误

来自分类Dev

在Java脚本中的setTimeout方法内调用setInterval函数获取setInterval(...)不是函数错误

来自分类Dev

Google App脚本公式中的未知错误

来自分类Dev

Google App脚本setTimeout函数问题

来自分类Dev

Google App脚本中的webapp javascript函数

来自分类Dev

app.default.firebase不是函数错误

来自分类Dev

.autocomplete不是函数错误

来自分类Dev

PHP脚本中的函数错误

来自分类Dev

Google App脚本函数返回空白

来自分类Dev

jQuery UI某些函数错误TypeError:$(...)。accordion不是函数

来自分类Dev

从另一个脚本访问start()函数错误?

来自分类Dev

React DND,connectDragSource不是函数错误

来自分类Dev

箭头函数错误:对象不是函数

来自分类Dev

React Native undefined不是函数错误

来自分类Dev

获取类型错误:* 不是函数错误

来自分类Dev

javascript - 单击不是函数错误

来自分类Dev

回调不是函数错误 [Nodejs]

来自分类Dev

“调度”不是函数错误

来自分类Dev

函数内的承诺得到错误不是函数错误

来自分类Dev

.filter 不是函数错误?

来自分类Dev

函数错误中的Javascript方法“不是函数”

来自分类Dev

getFeaturesByAttribute 不是函数错误

来自分类Dev

遇到 this.state 不是函数错误