web-dev-qa-db-ja.com

Google Apps Script:ドキュメントのコメントをコピーしますか?

現在のドキュメントを見て、コメントを取得し、コピーを作成し、コメントを新しいドキュメントにコピーすることになっている次のスクリプトに取り組んでいます。しかし、私は立ち往生しているようです。実際にコメントを取得してコピーする方法がわかりません。 「.getComments」および「.setComments」は失敗するようです。私は何が欠けていますか?

function onOpen() {
  // Add a menu with some items, some separators, and a sub-menu.
  DocumentApp.getUi().createMenu('Copy Comments')
      .addItem('Copy with comments', 'copyDocument')
      .addToUi();
}

function copyDocument(e) {
  var app = DocumentApp.getActiveDocument();
  var origId = app.getId();
  var origName = app.getName();
  var origFile = DocsList.getFileById(origId);
  //Set the scope
  var scope="https://www.googleapis.com/auth/drive";

  // GET the comments from the original Document

  var listUrl = "https://www.googleapis.com/drive/v2/files/"
   + origId
   + "/comments";

  var originalComments = listUrl.getComments(); 

  // Make a copy of the Document and store the ID
  var newFileId = origFile.makeCopy('Copy of ' + origName).getId();  

   // Set the URL to POST to
  var newUrl = "https://www.googleapis.com/drive/v2/files/"
   + newFileId
   + "/comments";

  // Write the comments to the new Document
  var insert = originalComments.setComments(newURL);
}
6
Acornrevolution

これはおそらく非常に難しいことです-コメントはApps Script API内ではなく、Drive REST AP​​Iを介してアクセスできます(つまり、HTTP経由で、単純な関数ではなく、GET要求を使用して、ために)。

Googleは2013年または2014年に(あまりよくわかりません)Googleをリリースしました ライブラリ Googleサービスとの些細なやり取りのためのGETリクエストを許可することなく、AppsスクリプトでこれらのAPIに接続します― ScriptApp.getOAuthTokenUrlFetchApp.getRequestXmlService.parseetc

公式ドキュメント から:

高度なGoogleサービスを使用するには、次の手順に従ってください。

  • スクリプトエディターで、Resources> Advanced Google services...を選択します。
  • 表示されるダイアログで、使用するサービスの横にあるon/offスイッチをクリックします。
  • ダイアログの下部で、Google Developers Consoleのリンクをクリックします。
  • 新しいコンソールで、使用するサービスの横にあるon/offスイッチを再度クリックします。
  • スクリプトエディタに戻り、ダイアログでOKをクリックします。有効にした高度なサービスは、オートコンプリートで利用可能になります。
  • Driveは、そうでなければHTTPアクセスされるドライブAPI へのショートカットになります。
    • oAuthをいじる必要はありません。ただDrive.{autocomplete suggestions appear}

コメントの取得( Drive.Comments.list )は、次の場合です:

var comments_list = Drive.Comments.list(document_id).items;

変数comments_listは配列です。各配列には、テキストノードなどのスクリプトにアクセスできる properties があります。

  • kind
  • commentId
  • htmlContent
  • anchor
  • author
  • createdDate
  • fileTitle
  • status
  • deleted
  • modifiedDate
  • content
  • fileId
  • replies

例えば。最初のコメントのcontentプロパティにアクセスできます

var comment1 = comments_list.items[0].content;

setComments(comment, document_id)関数がどれほど単純かはわかりません。たとえば、anchorに注意してください-これは独自の形式であるため、(私が知る限り)アンカーされていないコメントを作成することは現時点でのみ可能です。

Steven Bazyl(Google開発者)、 StackOverflowに書いた 2012年:

詳細については、 https://developers.google.com/drive/manage-comments をご覧ください。

FWIW、アンカーは現時点では少し制限されています。最大の問題は、コメントのアンカーが不変であることです。カスタムスキームを使用することになり、コンテンツ内で一意に識別できるもの(たとえば、XML要素IDまたはその他のマーカー)を参照できる場合、問題は発生しません。しかし、ドキュメントで詳しく説明されている他のアンカースキームのいくつかには問題があります。たとえば、テキストファイルの行へのアンカーは、ファイルが変更され、アンカーの位置の前に行が挿入されると壊れます。アンカーが変更可能になるまでは、自己をカスタムスキームやアンカーされていないコメントに制限するのが最善です。

5
Louis Maddox