搜索值和 return 行号
Search for value and return row number
我正在为这个脚本而苦恼。我需要搜索今天的日期,一旦匹配 return 列号(完成!)。我需要一个脚本来对行号执行相同的操作。如果我在 sheet 上只保留一个 table,我的脚本工作正常,但我有更多 tables,如果我使用 values.length -1 将 return 来自 sheet 的最后一行。此外,每个 table 可能没有固定的行号,因此需要是动态的。
这是我目前的脚本:
function getTodaysTotal() {
function toDateFormat(date) {
try {return date.setHours(0,0,0,0);}
catch(e) {return;}
}
var values = SpreadsheetApp
.openById("id")
.getSheetByName("Q3 - W27 - 39")
.getDataRange()
.getValues();
var today = toDateFormat(new Date());
var todaysColumn = values[5].map(toDateFormat).map(Number).indexOf(+today);
var output = values[values.length - 1][todaysColumn];
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", "dd/MM/yyyy");
这是我 table 的屏幕截图。
table
希望它有意义。我有列号,我需要找到包含总计的行号。
谢谢!
亲切的问候
您必须遍历一组数据,这可能是最快的。
查看以下脚本并在您现有的中实施。
不确定您正在查找的是否只有一列,例如 C 列:
for (i in values){
if (values[i][2]=='Total'){
Logger.log(i);
var nr = i
}
}
var nr 现在包含 i 作为它在 C 列([i] 之后的 #2)中找到单词 "Total" 的行号。
您可以在第一个右括号后随意使用该变量。
我将它添加到我的脚本中,但我在输出时得到未定义。如果我使用记录器日志,我会得到正确的值,但我也会得到一个空值(未定义)。所以我只需要第一个值。
function getTodaysTotal() {
function toDateFormat(date) {
try {return date.setHours(0,0,0,0);}
catch(e) {return;}
}
var values = SpreadsheetApp
.openById("id")
.getSheetByName("Q3 - W27 - 39")
.getDataRange()
.getValues();
for (i in values){
if (values[i][0]=='Total'){
var nr = i;
var newNr = parseInt(nr);
// Logger.log(nr);
var today = toDateFormat(new Date());
var todaysColumn =
values[5].map(toDateFormat).map(Number).indexOf(+today);
var output = values[newNr][todaysColumn];
Logger.log(output);
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", "dd/MM/yyyy");
// Logger.log(todaysColumn);
// Logger.log(output);
// return values[values.length - 1][todaysColumn];
}
}
if (output == undefined) {
GmailApp.sendEmail("email@company.com", "test data", "Today, " +emailDate +" we had no calls made or no values are inputed.");
}
else if (output == "") {
GmailApp.sendEmail("email@company.com", "test data", "Today, " +emailDate +" we had no calls made or no values are inputed.");
}
else {
GmailApp.sendEmail("email@company.com", "test data", "Today, " +emailDate +" we had " +output + " calls made.");
}
}
我正在为这个脚本而苦恼。我需要搜索今天的日期,一旦匹配 return 列号(完成!)。我需要一个脚本来对行号执行相同的操作。如果我在 sheet 上只保留一个 table,我的脚本工作正常,但我有更多 tables,如果我使用 values.length -1 将 return 来自 sheet 的最后一行。此外,每个 table 可能没有固定的行号,因此需要是动态的。
这是我目前的脚本:
function getTodaysTotal() {
function toDateFormat(date) {
try {return date.setHours(0,0,0,0);}
catch(e) {return;}
}
var values = SpreadsheetApp
.openById("id")
.getSheetByName("Q3 - W27 - 39")
.getDataRange()
.getValues();
var today = toDateFormat(new Date());
var todaysColumn = values[5].map(toDateFormat).map(Number).indexOf(+today);
var output = values[values.length - 1][todaysColumn];
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", "dd/MM/yyyy");
这是我 table 的屏幕截图。
table
希望它有意义。我有列号,我需要找到包含总计的行号。
谢谢!
亲切的问候
您必须遍历一组数据,这可能是最快的。
查看以下脚本并在您现有的中实施。
不确定您正在查找的是否只有一列,例如 C 列:
for (i in values){
if (values[i][2]=='Total'){
Logger.log(i);
var nr = i
}
}
var nr 现在包含 i 作为它在 C 列([i] 之后的 #2)中找到单词 "Total" 的行号。
您可以在第一个右括号后随意使用该变量。
我将它添加到我的脚本中,但我在输出时得到未定义。如果我使用记录器日志,我会得到正确的值,但我也会得到一个空值(未定义)。所以我只需要第一个值。
function getTodaysTotal() {
function toDateFormat(date) {
try {return date.setHours(0,0,0,0);}
catch(e) {return;}
}
var values = SpreadsheetApp
.openById("id")
.getSheetByName("Q3 - W27 - 39")
.getDataRange()
.getValues();
for (i in values){
if (values[i][0]=='Total'){
var nr = i;
var newNr = parseInt(nr);
// Logger.log(nr);
var today = toDateFormat(new Date());
var todaysColumn =
values[5].map(toDateFormat).map(Number).indexOf(+today);
var output = values[newNr][todaysColumn];
Logger.log(output);
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", "dd/MM/yyyy");
// Logger.log(todaysColumn);
// Logger.log(output);
// return values[values.length - 1][todaysColumn];
}
}
if (output == undefined) {
GmailApp.sendEmail("email@company.com", "test data", "Today, " +emailDate +" we had no calls made or no values are inputed.");
}
else if (output == "") {
GmailApp.sendEmail("email@company.com", "test data", "Today, " +emailDate +" we had no calls made or no values are inputed.");
}
else {
GmailApp.sendEmail("email@company.com", "test data", "Today, " +emailDate +" we had " +output + " calls made.");
}
}