【发布时间】:2019-07-04 22:38:49
【问题描述】:
我有一个轮换表(固定的轮换顺序(如人员或职责)),这周我已经得到了帮助。它按原样启动并运行,但为了更简单的阅读,我想转置它。
你可以看到我喜欢的转置表here
当前脚本用于预转置表。
它将在 Column 0 中搜索日期。如果是 7 天后,它将从第 1 列检索名称并将其与单独工作表中的电子邮件地址等匹配。
我想做的是将日期放在第 0 行,然后将后续名称放在第 1 行等
我尝试了各种方法。我已经浏览了代码并且可以看到它在做什么,并且我已经阅读了一些关于二维数组的内容,但我似乎无法找到一种方法让代码通过列而不是通过行。
代码如下:
function sendEmails() {
var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sh1 = ss1.getSheetByName("Rota")
ss1.setActiveSheet(sh1);
var rotalink = "https://docs.google.com/spreadsheets/d/1LgzUWSAGA2kbpar8r5nosU1bSHF7nrtvtUiHS3nB_e8";
var sheet = SpreadsheetApp.getActiveSheet();
// Fetch the range
var dataRange = sheet.getRange("B3:G50")
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
var today=new Date();
var timecell = new Date(row[0]);
var timediff = new Date();
var one_day=1000*60*60*24;
var daystogo = Math.ceil((timecell.getTime()-today.getTime())/(one_day));
if (daystogo==7) {//only e-mail people with one week to go. To change that alter the "7" to the number of days you want
var subject = "Rota reminder!";
var emailAddress = [];
var message;
message = "Hello \n\n"+
"You are down to help at Youth Café this week. \n\n" +
"Please see the below rota for your role \n\n" +
"If you have any questions or problems let us know at thameyouthcafe@gmail.com \n\n" +
"Remember, you can check the rota anytime by clicking on the link below: \n\n"+
rotalink
for (var x = 1; x < 5; x++) { // 5 because emails are till col4
// var emailAddress = []; // Start by collecting the non-blank emails in an array
if (getEmailFromName(row[x]) != "") {
emailAddress.push(getEmailFromName(row[x]))
}
}
emailAddress = emailAddress.join(); // Join the array to get a comma separated string
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
这是与 SKey 匹配的 getEmailFromName 函数(我认为它来自第一个函数中的“i”变量?
function getEmailFromName(sKey) {
// to use this function, don’t put anything in the first column (A) or row (1).
// Put the name (i.e. the key, or what we’re looking for) in column B.
// Put what we want to return in column C.
var columnToSearch = 1; //column B
// Set the active sheet to our email lookup
var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sh1 = ss1.getSheetByName("EmailContactList")
ss1.setActiveSheet(sh1);
var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
var line = -1;
for( var i = 0; i < data.length; i++ ) {
if( data[i][columnToSearch] == sKey ) {
line = i;
break;
}
}
if( line != -1 ) {
//do what you want with the data on "line"
return data[line][2]; //value on column C of the matched line
}
else {
return "";
// if criteria is not found
}
}
【问题讨论】:
-
为了正确理解您的目标,您能否将您想要的结果添加到您的共享电子表格中?
-
抱歉,下班了。不知道我是否可以 - 我不希望数据布局有任何变化。我想要的是查看电子表格第 3 行的代码 - 确定哪个日期符合条件,然后根据他们的姓名与另一张表的匹配情况在该周向相关姓名发送电子邮件。
-
感谢您的回复。我注意到已经发布了答案。我认为它会解决您的问题。
标签: javascript datetime google-apps-script google-sheets