1

首先,感谢 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");
      }

  }

}
4

2 回答 2

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,我不确定你能做到这一点!

II 会尝试遍历文档的所有元素并检查每个元素的类型,然后将作为 TOC 的元素复制到新文档中。

最终请参阅这篇文章以检查如何迭代文档的元素并检查它们的类型,该脚本的目的不同,但我想该方法应该对您有所帮助。

祝你好运

于 2013-08-18T21:33:38.770 回答
0

而不是
for(jj = 0; jj < len; II++ )
尝试
for(jj = 0; jj < len; jj++ )
而是

:再次阅读故障排除指南...

于 2013-08-17T19:15:04.057 回答