搜索值并返回行号

时间:2017-08-01 10:16:47

标签: javascript arrays google-apps-script google-sheets google-apps

我正在努力解决这个问题。我需要搜索今天的日期,一旦匹配它返回列号(完成!)。我需要一个脚本来对行号做同样的事情。如果我在该工作表上只保留一个表,我的脚本工作正常,但我有更多的表,如果我使用values.length -1将返回工作表的最后一行。此外,每个表可能没有固定的行号,因此需要是动态的。

这是我到目前为止的脚本:

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

希望它有意义。我有列号,我需要找到包含Total的行号。

谢谢!

亲切的问候

2 个答案:

答案 0 :(得分:0)

你必须遍历一个可能是最快的数据数组。

查看以下脚本并在现有脚本中实施。

不确定它是否只是您要查找的一列,例如C列:

for (i in values){
if (values[i][2]=='Total'){
Logger.log(i);
var nr = i
   }
}

var nr现在包含i作为行号,它找到了单词" Total"在C栏([i]之后的#2)。

然后,您可以在第一个右括号后的任何内容中使用该变量。

答案 1 :(得分:0)

我将此添加到我的脚本中,但我在输出时未定义。如果我使用记录器日志,我得到正确的值,但我也得到一个空值(未定义)。所以我只需要第一个值。

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.");

}
 }