首页 > 解决方案 > 使用两列过滤器检索数据范围

问题描述

我有Transactions包含主要数据的工作表和Report包含人员姓名的工作表(活动),将从Transaction主要数据计算的指标输入到其中。第一步是使用基于不同列的另一个条件检索该人的数据( 中的单元格)B6Report

var report = SpreadsheetApp.getActiveSpreadsheet();
var trsheet = report.getSheetByName("Transactions");
var areport = SpreadsheetApp.getActiveSheet();
var agent = areport.getRange('B6').getValue();

var trdata = trsheet.getDataRange().getValues();
var tdata = trdata.filter(function (row) {
    return row[29] == agent && row[5] == 'Closed' ;
  }); 

这不会产生错误,但会产生一个空数组tdata。如何正确地将第二个条件添加到过滤器函数中?

标签: javascriptarraysgoogle-apps-scriptgoogle-sheets

解决方案


代码看起来不错。由于以下两个原因,它可能无法正常工作:

1.您可能正在比较不同的数据类型。例如,代理可能是工作表中的字符串类型Transactions和活动工作表中的整数。

尝试改用getDisplayValues()是个好主意:

var report = SpreadsheetApp.getActiveSpreadsheet();
var trsheet = report.getSheetByName("Transactions");
var areport = SpreadsheetApp.getActiveSheet();
var agent = areport.getRange('B6').getDisplayValue();

var trdata = trsheet.getDataRange().getDisplayValues();
var tdata = trdata.filter(function (row) {
    return row[29] === agent && row[5] === 'Closed' ;
  }); 

2.还要确保在事务表中:

  • F 列 row[5]包含您要查找的关键字 : 'Closed',
  • AD 列 row[29]包含您要查找的变量的值:var agent

推荐阅读