我正在研究如何使用google脚本对数组执行某些操作。
对于我们学校,我们正在创建一个工具,可以自动创建一个电子表格,其中包含特定年份的日历,包括庆祝活动和其他特殊日子,其中一些会重复多年(新年,圣诞节,当地庆祝活动等),和其他变量每年。在这个电子表格中,我们列出了学年中的每一天,每行一个日期,以便在下一个单元格中设置相关信息,例如,由于某种原因某天不来的教师。这种格式非常有用,因为我们可以快速获取此信息并更改当天的日程安排。
我们认为我们可以使用这个不可更改的日期(庆祝活动)创建一个数组,然后与实际日历进行比较,并将特定假日放在一个单元格中。
数组中的年份没有出现,因为我们希望每年都有用,如果我们现在设置,我们认为以后还有更多的任务要做。在脚本的前一阶段,我们复制没有日期的日历模板,从用户提示设置实际年份(例如,“2017”,这是用户之前输入的内容)。也许这个提示信息可以在数组的第一个值(日期)内设置,并且每年使用具有完整日期的当前数组工作?我不知道......
问题出现在操纵日期和转换为电子表格可读内容上。我们的代码,可能与incorrections(我不是一个优秀的程序员,我正在学习如何在不同的javascript元素中进行交互,以及哪个是每个动作,方法或类的正确sintax)如下。
function writeStableHolidays(){
var sheet = SpreadsheetApp.getActive().getSheetByName("calendar");
var stableHolidays = [
[09/11, "Some Holiday, in format dd/mm"],
[10/12, "Other Holiday, we don't want to set here the Year"],
[11/01, "Another one"]
];
var whereToLook = [sheet.getRange(1,1,334,1)] // From here we look the actual year (format DD/MM/YYYY). This sheet has been created automatically from users prompt
var whereToWrite = [sheet.getRange(1,2,334,2)] // Next cell is where we want to write info from array
for ( i = 0 ; i < stableHolidays.length ; i++ ) { // Check every item in the array
for (j = 0 ; j < whereToLook.length ; j++ ) { // Check every first row in the "calendar" sheet
if (stableHolidays[i][0] == whereToLook[i]) {
whereToWrite.push(festiusFixes[i][1]); // If there's a coincidence write the holiday info in the cell
}
}
}
}
我在这里发现了几乎两个问题:a(现在!)未知语法不连贯(我之前说过它还不是我的特殊性:D)以及我们在gscript中操作日期时遇到的一些反复出现的问题的JavaScript。
提前感谢您的帮助。
答案 0 :(得分:1)
假设您的工作表日历如下所示:
您可以使用下一个功能:
function writeStableHolidays(){
var sheet = SpreadsheetApp.getActive().getSheetByName("calendar");
var stableHolidays = {
"09/11": "Some Holiday, in format dd/mm",
"10/12": "Other Holiday, we don't want to set here the Year",
"11/01": "Another one"
};
// get data range
var dataRange = sheet.getRange('A2:B'+sheet.getLastRow());
// get data values
var data = dataRange.getDisplayValues();
// loop data rows
for (var i = 0; i < data.length; i++)
{
// get DD/MM part from DD/MM/YYYY value
var dateVal = data[i][0].replace(/\/\d+$/, '');
// if found holiday on current date
if (stableHolidays[dateVal])
{
// update Holiday column array value
data[i][1] = stableHolidays[dateVal];
}
}
// write updated values to sheet
dataRange.setValues(data);
}
这将更新Holiday列的值: