首先,感谢 Serge insas 为编写这个脚本提供了足够的帮助!
脚本运行,但没有给我任何想要的结果。我想要做的是(1)在给定的文件夹中创建一个新文档(我们称之为'myfolder')并为它写一个标题。那行得通——有点。我得到一个文档,但它的图标是一个 doc 文件的小图像,但它的角翻了。它仅在查看器中打开。它确实有标题,但我后来没有尝试写给它。
(2) 获取 'myfolder' 中所有文件的数组。这就是 Serge 的帮助所在。它们需要被转换成可读的文件。我认为这有效(稍后会详细介绍)。至少调试器没有抛出错误。我最终得到了一个“内容”数组。
(3) 对于这些文档中的每一个,获取文件名并提取目录。将每个附加到 (1) 中创建的文档中。为此,我使用了一个从 one 迭代到 contents.length 的 for 循环。现在第一个问题出现了。无论 content.length 带回什么都是不正确的,因为下一个循环,其中发生的处理错误大约是文档数量,不包括脚本生成的这些小半文档。我通过 try-catch 构造解决了这个问题,该构造在遇到未定义的文件时停止。那和执行记录表明脚本确实经历了那个循环。
所以这是一个大问题。不管那些小半个文档是什么,除了第一行介绍性的文字外,没有其他任何东西是写给他们的。
调试器没用。(a) 它没有向我显示日志文件。只是约会。(b) 如果我放置一个断点,它可能会停在它处,但我看到的主要是一个对象列表。如果我点击 + 号,我会得到一个方法列表。显示了一些非对象变量。单步执行代码是不可能的,因为从一行到下一行最多需要三分钟,因此调试起来相当困难。
我能获得的唯一信息是执行记录确实表明我确实从文件中获取了 doc 对象。
我认为问题在于 a* doc = DocumentApp.openById(docObject[jj]); * 在下面的代码中以粗体显示。
很抱歉奇怪的错误处理;我试图了解什么是错误的。唉,调试器告诉我 Err 是一个字符串,没有给我任何价值。
其余代码是否有效,我不知道它是否有效,确实在第一次碰到粗体线时出错。
谢谢你的耐心。
function listDocTOCsInFolder()
{
// Thanks to crucial help from Serge insas via Stack Overflow.
var afolder; // Folder you want to work on
var contents; // Files in the folder
var TOCListDoc; // Document you will create to hold your TOC List
var docObject = []; // Holds a list of documents created from contents
var aname;
var adoc;
var err = "";
var isErr = false;
TOCListDoc = DocsList.createFile("TOCList", "Document TOC List");
afolder = DocsList.getFolderById("0B-UcimyrHLl2bm1OanExaHotc2M")
//Can't figure out what exactly constitutes the path of a folder.
TOCListDoc.addToFolder(afolder);
// Get all the document files in your named folder. Unfortunately,they are not document objects
var contents = afolder.getFilesByType(DocsList.FileType.DOCUMENT);
// This loop gives you an array of DocumentApp objects.
for (var ii = 0; ii < contents.length; ii++)
{
docObject.push(DocumentApp.openById(contents[ii].getId()));
}
// Now you can do a for loop to gather up the contents into one document.
Logger.log(contents.length);
// It isn't clear what this actually gets, because unless I set a trap of
// undefined documents, the loop keeps right on going.
var len = docObject.length;
var jj = 0;
for(jj = 0; jj < len; II++ )
{
try
{
**adoc = DocumentApp.openById(docObject[jj]);**
}
catch(err)
{
isErr = true;
}
if(!isErr)
{
// Get the information you want to write to your list doc
var TOC = adoc.getAs(DocumentApp.ElementType.TABLE_OF_CONTENTS);
logger.log(TOC);
aname = adoc.getName();
Logger.log(aname);
body.appendParagraph(counter, name);
body.appendParagraph(TOC);
//.setHeading(DocumentApp.ParagraphHeading.HEADING1);
}
else
{
Logger.log("Errored out");
}
}
}