我知道我并不是唯一一个因谷歌贬低DocsList
而赞成DriveApp
而出现问题的人。我已在代码中用DocList
替换了DriveApp
的所有引用。
我有一个电子表格,其中包含过去与Google文档模板很好地合并的变量,实际上是一个mailmerge。
以下是声明的变量:
var myDataSheet, myVariablesSheet;
var rowId, maxRows, maxRowsOverride;
var templateDocId;
var timeZone, timestamp, dateline;
var newFolder, newFolderId, collectionDate, collectionName,appendTimestamp;
var newDocNameBase, newDocNameSuffixCol, newDocName, newDoc, newDocId;
var fieldColRow, fieldArr, colArr;
当我运行脚本时,我将返回在我的代码的第165行标识的错误。错误说明:
TypeError:无法在对象的Copy of Letter中找到函数addFile 代表模板。 (第165行,文件“邮件合并”)
第165行:
DriveApp.getFileById(newDocId).addFile(DriveApp.getFolderByName(newFolderId));
奇怪的是,(至少对我而言)当我运行脚本时,我得到了一个输出的合并文档,但是从来没有多于一个。
我怀疑我正在处理某种类型的失败循环,以及我的文件命名和我的目标文件夹的问题,但我无法超越我的位置...任何见解,帮助或只是直接修复赞赏。
答案 0 :(得分:0)
getFolderByName()
方法返回文件夹迭代器。换句话说,它返回一个"对象"可以有多个元素。即使您可能只有一个具有给定名称的文件夹,您仍然需要使用循环来访问该文件夹。
Google Documentation - Folder Iterator
您无法将所有方法链接在一行代码中,从而导致错误。
答案 1 :(得分:0)
我看到你的代码出现了一些错误。
DriveApp.getFolderByName(String)
查找具有给定名称的文件夹,并返回多个文件夹。你好像已经传入了文件夹的id。文件夹的ID和名称不同。您可以创建名为“MyFolder”的文件夹,以及另一个名为“MyFolder”的文件夹。他们的名字是一样的,但他们的身份将是独一无二的。File.addFile(Folder);
。这就是你得到这个错误的原因。您应该切换它并使用Folder.addFile(File)
代替。这是固定代码: DriveApp.getFolderById(newDocId).addFile(DriveApp.getFileById(newDocId));
这个问题有点陈旧,但我希望我能提供帮助:)。