您已经正确掌握了脚本的基本结构,只是需要解决语义和一些错误处理。
您需要确定如何访问电子表格的内容,并与该选择保持一致。
- 在您的问题中,您首先使用 将电子表格的所有内容放入一个二维数组中
Range.getValues()
,然后尝试使用 多次直接从工作表中获取值.getSheetValues()
。
- 由于您的算法基于处理范围内的值,因此使用数组将是您最有效的方法。要引用
data
数组的内容,您只需要使用[row][column]
索引。
你应该提前考虑一下。如果您需要添加更多学生保管箱,将来会发生什么?在编写初始算法时,会盲目创建新文件夹。由于 Google Drive 允许多个同名文件夹,因此第二次运行该脚本会复制所有现有文件夹。因此,在创建任何东西之前,您需要检查该东西是否已经存在,并适当地处理它。
一般建议:在编辑器中编写应用程序脚本代码,并利用自动完成和代码着色。这将有助于避免变量名不匹配(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);
}
}
}