我是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 "不是一个函数外,大部分脚本都能正常工作。我试着为它创建一个单独的函数,并使用了其他帖子中的一些建议,但仍然不能让它工作。如果有人有什么想法,我可能在这里遗漏了什么,或者有什么建议,那将是非常有帮助的。谢谢
我相信你的目标如下。
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);
. 在这种情况下,就会出现错误。因为 params
的 searchFiles(params)
必须是查询字符串。"title='" + fileName + "'"
.searchFiles(fileName)
返回 FileIterator
. 这一点已经由 现有答案. 因为在Google Drive中,相同的文件名可以存在于同一个文件夹中,而且每个文件都由唯一的ID管理。所以这里需要修改如下。hasNext()
.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
.Folder.searchFiles()
返回一个fileIterator而不是一个文件。 如果它是唯一一个使用该名称的文件,那么你通常可以使用 mdpFile.next();