首先,感谢Serge insas提供了足够的帮助来编写这个脚本!
脚本运行,但不会给我任何类似于所需结果的内容。 我想做的是 (1)在给定文件夹中创建一个新文档(让我们称之为'myfolder')并为其编写标题。 这工作 - 有点。我得到一个文档,但它的图标是一个doc文件的小图像,但它的角落翻了。它只在观众中打开。它确实有标题,但我后来试图写它没什么。
(2)获取'myfolder'中所有文件的数组。这就是Serge的帮助进来的地方。他们需要转换成可读的文件。我认为这有效(稍后会详细介绍)。至少调试器没有抛出错误。我最终得到了一个'内容'数组。
(3)对于每个文档,获取文件名并提取目录。将其中的每一个附加到(1)中创建的文档中。为此,我使用了一个从一个迭代到contents.length的for循环。现在出现了第一个问题。无论content.length返回的内容都不正确,因为下一个循环,处理发生在大约文档数量的错误,不计算脚本生成的这些小半文档。我通过一个try-catch结构解决了这个问题,当它遇到一个未定义的文件时停止了。那个和执行记录表明脚本确实经历了那个循环。
所以这是大问题。无论那些小文档是什么,除了第一个介绍性的文章之外别无他物。
调试器没用。 (a)它没有显示日志文件。只是一个约会。 (b)如果我放置一个断点,它可以停在它上面,但我看到的主要是一个对象列表。如果我点击+号,我会得到一个方法列表。显示了一些非对象变量。不可能单步执行代码,因为从一行到下一行可能需要三分钟,所以调试它是相当困难的。
我能获得的唯一信息是执行记录确实表明我确实从文件中获取了doc对象。
我认为问题出在* 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");
}
}
}
答案 0 :(得分:0)
而不是
for(jj = 0; jj < len; II++ )
尝试for(jj = 0; jj < len; jj++ )
而是
并且:再次阅读troubleshooting guide ...
答案 1 :(得分:0)
当你说
时“对于每个文档,获取文件名并提取表格 内容。将其中的每一个附加到(1)
中创建的文档中
这确实是你应该做的......你使用了这段代码:
// Get the information you want to write to your list doc
var TOC = adoc.getAs(DocumentApp.ElementType.TABLE_OF_CONTENTS);
logger.log(TOC);
但是这样做你认为本文档中的第一个元素必然是TOC,我不确定你能做到这一点!!
我要尝试的是迭代所有文档的元素并检查每个元素的类型,然后将TOC 复制到新文档中。
最后查看this post以查看如何迭代文档的元素并检查它们的类型,这个脚本的目的是不同的,但我想这种方法可以帮助你。
祝你好运