首页 > 解决方案 > 为在不同工作表上找到的多个搜索词运行脚本

问题描述

我正在尝试从 aSCORESHEET中填充 a REPORTSHEET,使用 aREFERENCESHEET来整理搜索词和目标单元格。

我正在运行的脚本如下。这个想法是脚本searchDate在 中找到 'REFERENCESHEET并使用它们来定位 中的数据列REPORTSHEET

function superAuto() {
  var report = SpreadsheetApp.openById('REPORTSHEET');
  var reportData = report.getDataRange().getValues();

  var reference = SpreadsheetApp.openById('REFERENCESHEET');
  var referenceData = reference.getDataRange().getValues();

  var scorecard = SpreadsheetApp.openById('SCORESHEET');
  var scorecardData = scorecard.getDataRange().getValues();

  var tExpenses = "Total Expenses";

  for(n=0;n<referenceData.length;++n){
    var searchDate = referenceData[n][0] ;
    Logger.log (searchDate)
  }

  var column = columnfinder(searchDate);

  for (var a = 0; a < referenceData.length; a++) {
    var refRow = referenceData[a];
   for (var i = 0; i < reportData.length; i++) {
    var row = reportData[i];
    if (row[0] == tExpenses && refRow[0] == searchDate) {
      scorecard.getRange(refRow[5]).setValue(row[column]);
    }
   }
  }
}

function columnfinder(find) {
  var report = SpreadsheetApp.openById('REPORTSHEET');
  var reportData = report.getDataRange().getValues();

  var reference = SpreadsheetApp.openById('REFERENCESHEET');
  var referenceData = reference.getDataRange().getValues();

  
    for(var j=0, jLen=reportData.length; j<jLen; j++) {
      for(var k=0, kLen=reportData[0].length; k<kLen; k++) {
        if(find == reportData[j][k]) {
          Logger.log(k);
          return (k);}
      }
    }
  }

从广义上讲,代码有效,就好像我将其定义searchDate为我正在寻找的术语之一(例如 Jan-21),它一切正常。问题在于,在查找多个搜索词时似乎并没有这样做 - 因此填充多行 - 根据:

for(n=0;n<referenceData.length;++n){
    var searchDate = referenceData[n][0] ;
    Logger.log (searchDate)
  }

日志告诉我它searchDate在 REFERENCESHEET 中找到 ',但它无法运行它们function columnfinder(我没有得到第二个记录器的日志)。

我怀疑答案就在我收到的对这个想法的早期版本的一个很好的答案中的某个地方——如何为 setValue 返回多个列值——但我无法让它适合。有什么想法吗?

编辑:请查找示例参考表和报告表以获取更多信息:

参考表 报告单

标签: google-apps-scriptgoogle-sheets

解决方案


日志告诉我它在 REFERENCESHEET 中找到了 searchDate,但它无法通过函数 columnfinder 运行它们(我没有得到第二个记录器的日志)

不在循环columnfinder内执行。for

试试这个:

for(n=0;n<referenceData.length;++n){
    var searchDate = referenceData[n][0] ;
    Logger.log(searchDate);
    columnfinder(searchDate); // modified code
  }

你会得到两者logs

对不起,如果我误解了你的问题。


推荐阅读