17

私はここに完全な初心者の投稿のように感じます。私はCSS、HTML、およびXMLをかなりよく知っていますが、常にJSを避けてきました。私はjavascriptをほとんど知らず、最近、追いつくためにLynda.comコースを開始しました。私の無知でごめんなさい。そのため、私はGoogleAppsScriptの学習に本当に苦労しています。明らかに、JSを理解する前に、JSを学ぶ必要があります。

私が働いている学校(5000人の学生)はオンラインカリキュラムを設定しました。私は何千ものGoogleドキュメントワークシートの形でカリキュラムを作成しました。これらのワークシートは、さまざまなWebサイトにリンクされています。

私たちが直面している問題は、学生がドキュメントを開くときに、編集する前にドキュメントのコピーを作成する必要があることです(もちろん、元のドキュメントを編集できるようにしたくありません)。モバイルデバイスでデスクトップUIを使用する場合、Googleドキュメントでコピーを作成することは実際にはうまく機能しないため、これはタブレットでモバイルブラウザを使用している学生にとっては本当に残念です。

この種のことはスクリプトで自動化できることを私は知っています。私はここを見てきました、そして低くて見よ、それはうまくいきます!そんな機能性を3年も探し続けてきた私は、パンツを喜んでおしっこしています。(はい、それは悲しいことです)。

だから、私が求めているのは、学生がウェブサイトのレッスンのボタンをクリックすると、ワークシートのコピーが自動的に作成されて新しいタブで開くように、初心者がこのコードを適応させる方法を理解するのを喜んで手伝ってくれるでしょうか?

/**
 * Copy an existing file.
 *
 * @param {String} originFileId ID of the origin file to copy.
 * @param {String} copyTitle Title of the copy.
 */
function copyFile(originFileId, copyTitle) {
  var body = {'title': copyTitle};
  var request = gapi.client.drive.files.copy({
    'fileId': originFileId,
    'resource': body
  });
  request.execute(function(resp) {
    console.log('Copy ID: ' + resp.id);
  });
} 

昨日Javascriptを学びながら一日中過ごしましたが、まだまだ長い道のりがあります。私が自分でこれを理解できるようになるまでにどれくらいの時間がかかるかわかりません。

4

4 に答える 4

14

あなたは確かにAppsScriptでこれを行うことができます。ほんの数行かかります。実際、私が以下に書いたバージョンだけを使用することができます。

これが私がそれをする方法です-

  1. 元のドキュメントが、アクセスするユーザーに対して少なくとも読み取り可能になっていることを確認してください。

    アクセス権

  2. URLからfileIdを取得します-

    ここに画像の説明を入力してください

  3. 次のコードを使用して、AppsScriptでWebアプリを記述します-

    function doGet(e) {
      //file has to be at least readable by the person running the script
      var fileId = e.parameters.fileId;  
      if(!fileId){
        //have a default fileId for testing. 
        fileId = '1K7OA1lnzphJRuJ7ZjCfLu83MSwOXoEKWY6BuqYitTQQ'; 
      }
      var newUrl = DocsList.getFileById(fileId).makeCopy('File copied to my drive').getUrl(); 
      return HtmlService.createHtmlOutput('<h1><a href="'+newUrl+'">Open Document</a></h1>');
    }
    
  4. アプリにアクセスする人として実行するためにデプロイします。

    設定を展開する

覚えておくべき重要なことの1つは、AppsScriptによって構築されたWebアプリは新しいウィンドウを自動的に開くことができないということです。代わりに、編集モードでドキュメントにクリックできるリンクを表示できます。

ここで実際の動作を確認できます(ダミーファイルが作成されます)-

https://script.google.com/macros/s/AKfycbyvxkYqgPQEb3ICieywqWrQ2-2KWb-V0MghR2xayQyExFgVT2h3/exec?fileId=0AkJNj_IM2wiPdGhsNEJzZ2RtZU9NaHc4QXdvH

あなたはあなた自身のものを入れることによってこれをテストすることができますfileId

于 2012-11-06T01:23:07.017 に答える
7

は非推奨であるためDocsList、現在、次のコードを使用してファイルのコピーを作成できます。

File file=DriveApp.getFileById(fileId).makeCopy(fileName, folder);

ArunNagarajanの回答で説明されているようにどこfileIdで入手できますか。

于 2016-04-09T07:19:49.830 に答える
4

2015年の更新で、GoogleScriptは不明な理由でfileIdを削除しました。GoogleドキュメントのURLに「/copy」を追加する以前の方法が再び有効になりました。例)https://docs.google.com/document/d/1GTGuLqahAKS3ptjrfLSYCjKz4FBecv4dITPuKfdnrmY/コピー

于 2015-09-16T18:05:21.387 に答える
4

これを適切に行うためのコードは次のとおりです(2019、2020、2021で動作します):

/**
 * Create custom menu when document is opened.
 */
function onOpen() {
  DocumentApp.getUi()
    .createMenu('For Students')
    .addItem('Make a copy', 'makeACopy')
    .addToUi();
}

function makeACopy() {
  var templateId = DocumentApp.getActiveDocument().getId();
  DriveApp.getFileById(templateId).makeCopy();
}
于 2019-04-03T05:01:48.327 に答える