1

まず、このスクリプトを作成するのに十分な支援をしてくれた Serge insas に感謝します。

スクリプトは実行されますが、望ましい結果が得られません。私がやりたいことは、(1)特定のフォルダー(「myfolder」と呼びましょう)に新しいドキュメントを作成し、そのタイトルを書きます。それはうまくいきます。ドキュメントを取得しましたが、そのアイコンはドキュメント ファイルの小さな画像ですが、角が裏返されています。ビューアでのみ開きます。タイトルはありますが、後で書き込もうとしたことはありません。

(2) 「myfolder」内のすべてのファイルの配列を取得します。そこに Serge の助けが入りました。それらは読み取り可能なドキュメントに変換する必要があります。うまくいったと思います(これについては後で詳しく説明します)。少なくとも、デバッガーはエラーをスローしませんでした。「コンテンツ」配列になりました。

(3) これらのドキュメントのそれぞれについて、ファイル名を取得し、目次を抽出します。それぞれを (1) で作成したドキュメントに追加します。これを行うために、1 から content.length まで繰り返す for ループを使用しました。ここで最初の問題が発生しました。処理が発生した次のループで、スクリプトが生成したこれらの小さなハーフドキュメントを数えずに、ほぼドキュメント数でエラーが発生したため、contents.length が戻したものは正しくありませんでした。未定義のファイルにヒットしたときに停止する try-catch 構造によって、これを回避しました。それと実行のトランスクリプトは、スクリプトがそのループを通過したことを示唆しています。

ここに大きな問題があります。それらの小さなハーフドキュメントが何であれ、最初の導入行以外は何も書かれていませんでした.

デバッガーは役に立たない。(a) ログファイルが表示されません。ただのデート。(b) ブレークポイントを配置すると、そこで停止する場合がありますが、ほとんどの場合、オブジェクトのリストが表示されます。+ 記号をクリックすると、メソッドのリストが表示されます。非オブジェクト変数のいくつかが示されています。ある行から次の行に移動するのに最大 3 分かかる場合があるため、コードをステップ実行することは不可能です。そのため、これをデバッグするのはかなり困難でした。

私が得ることができた唯一の情報は、ファイルから 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 に答える