現在のドキュメントを見て、コメントを取得し、コピーを作成し、コメントを新しいドキュメントにコピーすることになっている次のスクリプトに取り組んでいます。しかし、私は立ち往生しているようです。実際にコメントを取得してコピーする方法がわかりません。 「.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);
}
これはおそらく非常に難しいことです-コメントはApps Script API内ではなく、Drive REST APIを介してアクセスできます(つまり、HTTP経由で、単純な関数ではなく、GET要求を使用して、ために)。
Googleは2013年または2014年に(あまりよくわかりません)Googleをリリースしました ライブラリ Googleサービスとの些細なやり取りのためのGETリクエストを許可することなく、AppsスクリプトでこれらのAPIに接続します― ScriptApp.getOAuthToken
、UrlFetchApp.getRequest
、 XmlService.parse
、etc。
公式ドキュメント から:
高度なGoogleサービスを使用するには、次の手順に従ってください。
- スクリプトエディターで、Resources> Advanced Google services...を選択します。
- 表示されるダイアログで、使用するサービスの横にあるon/offスイッチをクリックします。
- ダイアログの下部で、Google Developers Consoleのリンクをクリックします。
- 新しいコンソールで、使用するサービスの横にあるon/offスイッチを再度クリックします。
- スクリプトエディタに戻り、ダイアログでOKをクリックします。有効にした高度なサービスは、オートコンプリートで利用可能になります。
Drive
は、そうでなければHTTPアクセスされるドライブAPI へのショートカットになります。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またはその他のマーカー)を参照できる場合、問題は発生しません。しかし、ドキュメントで詳しく説明されている他のアンカースキームのいくつかには問題があります。たとえば、テキストファイルの行へのアンカーは、ファイルが変更され、アンカーの位置の前に行が挿入されると壊れます。アンカーが変更可能になるまでは、自己をカスタムスキームやアンカーされていないコメントに制限するのが最善です。