1

我刚刚开始学习 Javascript 和 Google Apps 脚本。我已经查看并使用了一些脚本,因此正在尝试创建自己的脚本。我想要做的是获取学生列表(姓名和电子邮件)并运行脚本来创建“保管箱”或使用他们的名字并共享到他们的电子邮件地址的文件夹。这样,他们可以轻松地以有组织的方式向我提交工作。我写了这个粗略的脚本,我知道它不会起作用。

我想知道是否有人可以给我一些提示?

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

您已经正确掌握了脚本的基本结构,只是需要解决语义和一些错误处理。

您需要确定如何访问电子表格的内容,并与该选择保持一致。

  • 在您的问题中,您首先使用 将电子表格的所有内容放入一个二维数组中Range.getValues(),然后尝试使用 多次直接从工作表中获取值.getSheetValues()
  • 由于您的算法基于处理范围内的值,因此使用数组将是您最有效的方法。要引用data数组的内容,您只需要使用[row][column]索引。

你应该提前考虑一下。如果您需要添加更多学生保管箱,将来会发生什么?在编写初始算法时,会盲目创建新文件夹。由于 Google Drive 允许多个同名文件夹,因此第二次运行该脚本会复制所有现有文件夹。因此,在创建任何东西之前,您需要检查该东西是否已经存在,并适当地处理它。

一般建议:在编辑器中编写应用程序脚本代码,并利用自动完成和代码着色。这将有助于避免变量名不匹配(ssvs 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 回答