Return行号匹配错误
Return row number is match error
我在一个 sheet 中有一些 table,我需要制作一个脚本来每天发送一封电子邮件。它今天搜索的脚本日期,将其匹配到我的 table 和 return 列号,然后我在第一列 (A) 上查找总计,一旦找到它,return 行号。一旦我有了行号和列号,return 那天的总价值。我在 JavaScript 方面并不先进,而且我在数组方面很吃力(仍在学习)。到目前为止,我的脚本运行良好,只要我在 sheet 上只有一个 table,但在 sheet 上将超过 50 个 table,每个最后会有一个总计。我的公式会找到总计,但会 return 所有总计(行号)作为字符串。我需要的是只获得第一个总计(行号)。我希望这一切都有意义。
我附上了一张图片来制作一个想法和我目前的脚本:
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,但是这个下面会有更多,每个都有一个总计。
谢谢!
亲切的问候!
您应该在循环之外声明 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);
我在一个 sheet 中有一些 table,我需要制作一个脚本来每天发送一封电子邮件。它今天搜索的脚本日期,将其匹配到我的 table 和 return 列号,然后我在第一列 (A) 上查找总计,一旦找到它,return 行号。一旦我有了行号和列号,return 那天的总价值。我在 JavaScript 方面并不先进,而且我在数组方面很吃力(仍在学习)。到目前为止,我的脚本运行良好,只要我在 sheet 上只有一个 table,但在 sheet 上将超过 50 个 table,每个最后会有一个总计。我的公式会找到总计,但会 return 所有总计(行号)作为字符串。我需要的是只获得第一个总计(行号)。我希望这一切都有意义。
我附上了一张图片来制作一个想法和我目前的脚本:
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,但是这个下面会有更多,每个都有一个总计。
谢谢!
亲切的问候!
您应该在循环之外声明 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);