【问题标题】:Return row number is match error返回行号是匹配错误
【发布时间】:2017-08-01 20:16:22
【问题描述】:

我在一张纸上有一些表格,我需要编写一个脚本来每天发送一封电子邮件。它今天搜索的脚本日期,将其匹配到我的表中并返回列号,然后我在第一列 (A) 上查找 Total,一旦找到,返回行号。获得行号和列号后,返回当天的总计值。我对 JavaScript 不熟悉,而且我对数组感到很困惑(仍在学习)。到目前为止,我的脚本运行良好,只要我在该表上只有一个表,但表上将有 50 多个表,每个表最后都有一个总计。我的公式会找到总计,但会将所有总计(行号)作为字符串返回。我需要的是获得第一个总计(行号)。我希望这一切都有意义。

我已经附上了一张图片来提出一个想法和我到目前为止的脚本:

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

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

谢谢!

亲切的问候!

【问题讨论】:

  • 您能否提供一个包含 50 个表格的工作表示例,或者更好的是提供指向实际工作表的链接?什么可以唯一地标识每个表与其他表?
  • 我可以提供一个包含 2 个表的测试文件。所有 50 个的模式都是相同的。drive.google.com/…。 ....
  • 谢谢安德烈!是否有可能获得工作表的编辑权限。

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


【解决方案1】:

您应该在循环之外声明 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);

【讨论】:

  • 快速问题...如果我想要第二个值或第三个值怎么办?我的意思是仅针对行(总计)。谢谢!
猜你喜欢
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多