返回行号是匹配错误

时间:2017-08-01 20:16:22

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

我在一张表中有一些表格,我需要制作一个脚本来每天发送一封电子邮件。它今天搜索的脚本是日期,将它匹配到我的表中并返回列号,然后我在第一列(A)上查找Total,一旦找到它,返回行号。一旦我有行号和列号,返回当天的总值。我没有使用JavaScript进步,而且我在使用数组(仍然在学习)。到目前为止我的脚本工作非常好,因为我在该工作表上只有一个表,但在工作表上将有超过50个表,每个表最后会有一个Total。我的公式将找到Total,但会将所有Totals(行号)作为字符串返回。我需要的是获得第一个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;

   Logger.log(nr); // will return two values (41 - first total and 
   104 second total ... if you add more Total it will return all rows 
   numbers that contain word Total

 }
}

var today = toDateFormat(new Date());
var todaysColumn = 
values[5].map(toDateFormat).map(Number).indexOf(+today);
var output = values[nr][todaysColumn];
 //     Logger.log(output);
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", 
 "dd/MM/yyyy");

table

这只是第一个表格,但在这个表格下会有更多,每个表格都有一个。

谢谢!

亲切的问候!

1 个答案:

答案 0 :(得分:2)

您应该在循环之外声明nr,因为您将使用该值。

var nr = 0;

由于您正在读取数组,因此您应该使用数组长度进行循环

for (var i=0; i<values.length; i++){
  if (values[i][0]=='Total'){
    nr = i;
    Logger.log(nr); 
    break; // this will stop at the first match
  }
}

将总数作为字符串后,可以通过调用以下函数将其转换为数字。

var string = values[a][b];
var num = Number(string);