1

Javascript と Google Apps Script を学び始めたばかりです。いくつかのスクリプトを見て遊んだので、独自のスクリプトを作成しようとしています。私がやりたいのは、生徒のリスト (名前と電子メール) を取得し、スクリプトを実行して「ドロップボックス」、または名前を使用し、電子メール アドレスで共有されるフォルダを作成することです。このようにして、彼らは整理された方法で簡単に私に仕事を提出することができます. 私はこの大まかなスクリプトを書きましたが、うまくいかないことはわかっています。

誰かが私にいくつかのヒントを与えることができるかどうか疑問に思っていましたか?

function createDropbox () {
 // Get current spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = sh1.getDataRange().getValues();

 // For each email address (row in a spreadsheet), create a folder, name it with the data from the Class and Name column, then share it to the email

for(n=1;n<data.length;++n){

var class = sheet.getSheetValues(n, 1, 1, 1);
var name = sheet.getSheetValues(n, 2, 1, 1);
var email = sheet.getSheetValues(n, 3, 1, 1);
var folder = DocsList.createFolder('Dropbox');
 folder.createFolder(class . name);
var share = folder.addEditor(email);

}

}
4

1 に答える 1

3

スクリプトの基本構造が正しくできました。解決する必要があるのは、セマンティクスといくつかのエラー処理だけです。

スプレッドシートのコンテンツにアクセスする方法を決定し、その選択に一貫性を持たせる必要があります。

  • あなたの質問では、最初に を使用してスプレッドシートのすべての内容を 2 次元配列Range.getValues()に取得し、次に を使用してシートから直接値を複数回取得しようとしています.getSheetValues()
  • アルゴリズムは範囲内の値の処理に基づいているため、配列の使用が最も効果的なアプローチになります。配列の内容を参照するには、インデックスdataを使用するだけです[row][column]

少し前向きに考えるべきです。生徒用ドロップボックスをさらに追加する必要がある場合、将来どうなりますか? 最初のアルゴリズムが作成されると、新しいフォルダーがやみくもに作成されます。Google ドライブでは同じ名前の複数のフォルダが許可されるため、スクリプトを 2 回実行すると、既存のすべてのフォルダが複製されます。したがって、何かを作成する前に、そのものが既に存在するかどうかを確認し、適切に処理する必要があります。

一般的なアドバイス: アプリのスクリプト コードをエディターで記述し、オートコンプリートとコードの色分けを利用します。ssこれにより、変数名の不一致 ( vs )などのミスを回避できますsh1

自分で演習を完了する場合は、ここで読むのをやめてください。


脚本

このスクリプトには、onOpen()関数に加えて、スプレッドシート内で使用できるメニューを作成する関数がありますcreateDropbox()

このcreateDropbox()関数は、最上位の「Dropbox」フォルダが存在しない場合は作成します。次に、スプ​​レッドシート内のすべての生徒に対して同じことを行い、サブフォルダーがまだ存在しない場合は作成して共有します。スプレッドシートにさらに生徒を追加する場合は、スクリプトを再度実行して追加のフォルダーを取得します。

無料の教育サービスとして、いくつかのトリッキーな部分を説明するコメントを含めました。

/**
 * Create menu item for Dropbox
 */
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Create / Update Dropbox",
    functionName : "createDropbox"
  }];
  sheet.addMenu("Dropbox", entries);
};

function createDropbox () {
  // Get current spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getDataRange()  // Get all non-blank cells
               .getValues()     // Get array of values
               .splice(1);      // Remove header line

  // Define column numbers for data. Array starts at 0.
  var CLASS = 0;
  var NAME = 1;
  var EMAIL = 2;

  // Create Dropbox folder if needed
  var DROPBOX = "Dropbox";    // Top level dropbox folder
  try {
    // getFolder throws an exception if folder not found.
    var dropbox = DocsList.getFolder(DROPBOX);
  }
  catch (e) {
    // Did not find folder, so create it
    dropbox = DocsList.createFolder(DROPBOX);
  }

  // For each email address (row in a spreadsheet), create a folder,
  // name it with the data from the Class and Name column,
  // then share it to the email
  for (var i=0; i<data.length; i++){
    var class = data[i][CLASS];
    var name = data[i][NAME];
    var email = data[i][EMAIL];

    var folderName = class + ' ' + name;
    try {
      var folder = DocsList.getFolder(DROPBOX + '/' + folderName);
    }
    catch (e) {
      folder = dropbox.createFolder(folderName)
                      .addEditor(email);
    }
  }
}
于 2013-05-09T14:22:54.660 に答える