Google Apps 脚本:将文件移动到共享驱动器文件夹时,moveTo 函数会为某些用户引发异常
Google Apps Script: moveTo function throws exception for some users when a file is moved to a shared drive folder
在 gSheets 中,我编写了一个应用程序脚本,它创建了一个基于 gDoc 的 DocX 文件。然后将 DocX 文件移动到目标文件夹,这是一个共享的 gDrive 文件夹。
这是代码片段:
function createDocX(docID, rowData, subFolder) {
var token = ScriptApp.getOAuthToken();
var blb = UrlFetchApp.fetch('https://docs.google.com/feeds/download/documents/export/Export?id='+docID+'&exportFormat=docx',
{headers : {Authorization : 'Bearer '+ token}}).getBlob();
//Create the docx file in Google Drive
var docxFile = DriveApp.createFile(blb).setName(`${rowData[0][3]}_Report.docx`);
//Move the docx file
docxFile.moveTo(subFolder);
}
这是我创建目标文件夹的方式:
var subFolder = folder.createFolder(rowData[0][3]);
我在另一个电子表格上使用了相同的脚本,它对我团队中的每个用户都运行良好。但是,我制作了一个新的电子表格,脚本只为我和另一个脚本的早期采用者运行。当新用户尝试使用该脚本时,他们会收到以下错误:
Exception: Unexpected error while getting the method or property moveTo on object DriveApp.File.
我检查过每个用户都可以访问文件应该移动到的共享文件夹。
编辑:问题似乎是由共享驱动器引起的。如果我将目标文件夹更改为原始文件夹,它对每个人都有效。但是,它不适用于完全相同目录中的新文件夹。
在你的代码中我看不到 subFolder
定义。是文件夹ID吗?如果是这样,要使 moveTo()
方法起作用,您需要先获取该文件夹:
var subFolder = DriveApp.getFolderById('here goes folder id as string');
假设所有 运行 使用脚本的用户都具有对 subFolder
的正确访问权限,您可以直接在那里创建文件而不是移动它
修改
var docxFile = DriveApp.createFile(blb).setName(`${rowData[0][3]}_Report.docx`);
//Move the docx file
docxFile.moveTo(subFolder)
到
var docxFile = DriveApp.getFolderById('here goes folder id as string').createFile(blb).setName(`${rowData[0][3]}_Report.docx`);
如果修改后的代码片段对您不起作用,请检查以下内容:
- 使用代码的用户运行需要对共享驱动器上的文件夹具有“贡献者”或“内容管理员”角色
- 确保代码 运行 代表具有相应权限的其他用户而不是代表其他用户(如果函数 运行 被触发可能会发生通过可安装的触发器或作为 webApp 执行。)
- 在函数中记录
subFolder
id 以确保找到正确的文件夹
在 gSheets 中,我编写了一个应用程序脚本,它创建了一个基于 gDoc 的 DocX 文件。然后将 DocX 文件移动到目标文件夹,这是一个共享的 gDrive 文件夹。
这是代码片段:
function createDocX(docID, rowData, subFolder) {
var token = ScriptApp.getOAuthToken();
var blb = UrlFetchApp.fetch('https://docs.google.com/feeds/download/documents/export/Export?id='+docID+'&exportFormat=docx',
{headers : {Authorization : 'Bearer '+ token}}).getBlob();
//Create the docx file in Google Drive
var docxFile = DriveApp.createFile(blb).setName(`${rowData[0][3]}_Report.docx`);
//Move the docx file
docxFile.moveTo(subFolder);
}
这是我创建目标文件夹的方式:
var subFolder = folder.createFolder(rowData[0][3]);
我在另一个电子表格上使用了相同的脚本,它对我团队中的每个用户都运行良好。但是,我制作了一个新的电子表格,脚本只为我和另一个脚本的早期采用者运行。当新用户尝试使用该脚本时,他们会收到以下错误:
Exception: Unexpected error while getting the method or property moveTo on object DriveApp.File.
我检查过每个用户都可以访问文件应该移动到的共享文件夹。
编辑:问题似乎是由共享驱动器引起的。如果我将目标文件夹更改为原始文件夹,它对每个人都有效。但是,它不适用于完全相同目录中的新文件夹。
在你的代码中我看不到 subFolder
定义。是文件夹ID吗?如果是这样,要使 moveTo()
方法起作用,您需要先获取该文件夹:
var subFolder = DriveApp.getFolderById('here goes folder id as string');
假设所有 运行 使用脚本的用户都具有对 subFolder
的正确访问权限,您可以直接在那里创建文件而不是移动它
修改
var docxFile = DriveApp.createFile(blb).setName(`${rowData[0][3]}_Report.docx`);
//Move the docx file
docxFile.moveTo(subFolder)
到
var docxFile = DriveApp.getFolderById('here goes folder id as string').createFile(blb).setName(`${rowData[0][3]}_Report.docx`);
如果修改后的代码片段对您不起作用,请检查以下内容:
- 使用代码的用户运行需要对共享驱动器上的文件夹具有“贡献者”或“内容管理员”角色
- 确保代码 运行 代表具有相应权限的其他用户而不是代表其他用户(如果函数 运行 被触发可能会发生通过可安装的触发器或作为 webApp 执行。)
- 在函数中记录
subFolder
id 以确保找到正确的文件夹