是否可以创建嵌套变量?

时间:2015-12-10 17:33:56

标签: google-apps-script google-sheets google-calendar-api

不确定这是否可行,但我之前收到的帮助是巨大的,所以它可以带来什么伤害。

我有一个非常适合将信息从谷歌电子表格导入我的日历的脚本。问题是我有3个不同的信息列(我希望将其他目的分开),我希望将其导入到我的日历的描述中。这可能不是正确的问题,但是有没有办法创建一个嵌套变量来导入所有3行/列?

这是我的脚本,但如果我可以将row [6] [8] [9]导入描述中,那将会很棒......

function importCalendar() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 2;  // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "CALENDAR ID";
var cal = CalendarApp.getCalendarById(calId);
for (i=0; i<data.length; i++) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var startDate = row[0];  // First column
var title = row[3];           // Second column
var location = row[4];
var description = row[6];
var id = row[7];              // 8th column == eventId
var advancedArgs ={description: description, location: location};
// Check if event already exists, update it if it does
try {
  var event = cal.getEventSeriesById(id);
}
catch (e) {
  // do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
  var newEvent = cal.createAllDayEvent(title, new Date(startDate), advancedArgs).getId();
  row[7] = newEvent;  // Update the data array with event ID
}
else {
  event.setTitle(title);
  event.setDescription(description);
  event.setLocation(location);
  var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
  event.setRecurrence(recurrence, new Date(startDate));
}
debugger;
}
// Record all event IDs to spreadsheet
range.setValues(data);
}

2 个答案:

答案 0 :(得分:1)

嗯,你当然可以制作一个二维数组,或者更确切地说是一个n维数组。请采取以下措施:

var table = [['Fruits', 'Veggies', 'SomethingElse'], ['Apple', 'Banana', 'Peach'], ['Carrot', 'Cucumber', 'Raddish'], [['Animals', 'People'], ['Lion', 'Tiger', 'Bear'], ['Weird Al', 'George Lopez']]];
Console.log(table[0]) //Returns the array ['Fruits', 'Veggies', 'SomethingElse']

这可能很有用,但您可能希望列名是数组中的第一个元素,如下所示:

var table = [['Fruits', 'Apple', 'Banana', 'Peach'], ['Veggies', 'Carrot', 'Cucumber', 'Raddish'], ['SomethingElse', ['Animals', 'People'], ['Lion', 'Tiger', 'Bear'], ['Weird Al', 'George Lopez']]];
Console.log(table[0]) //Returns the array ['Fruits', 'Apple', 'Banana', 'Peach']

这可能是你想要的。现在访问的东西非常简单!

var Fruits = table[0]  //For simplicity
console.log(Fruits[0]) //Fruits
console.log(Fruits[1]) //Apple
console.log(Fruits[2]) //Banana
same as 
console.log(table[0][0])
console.log(table[0][1])
console.log(table[0][2])

还有你的n维数组!

答案 1 :(得分:1)

您似乎只想在description中引用多个列值。最好我可以告诉这只是基本的字符串连接。

所以让我们把你想要的元素合并到一个字符串中,至少避免一大堆+。是否希望它们在同一行或单独的行上分隔显示取决于您。只需要更改连接中的值。

var description = [row[6],row[8],row[9]].join('\n')

或者如果你想要它们在同一行

var description = [row[6],row[8],row[9]].join(' ')

我不知道在一次调用中调用多个非顺序元素的任何锯齿形符号。我们只创建一个新数组,以便我们可以调用join。