Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 限制查询一个结果,其中有2个值匹配_Google Sheets - Fatal编程技术网

Google sheets 限制查询一个结果,其中有2个值匹配

Google sheets 限制查询一个结果,其中有2个值匹配,google-sheets,Google Sheets,我试图在两个长列中查询代理的名称,问题是名称在两个表中重复,一个是生产力的总和,另一个是利用率的总和 问题是,当我查询列时,它会返回生产力和利用率的数字 如何使查询仅搜索生产力和利用率 链接在这里:在这种情况下,应用程序脚本将是一个更好的解决方案。以下代码的工作原理如下: 从列D和列A中获取名称 对于D列的每个名称,它将与A列的每个名称进行比较(即2) 如果名称一致(第一个),它将检查列A名称的背景色(第二个If),以累积总生产量和总使用量 到达A列末尾后,将D中每个名称的值写入Total Pr

我试图在两个长列中查询代理的名称,问题是名称在两个表中重复,一个是生产力的总和,另一个是利用率的总和

问题是,当我查询列时,它会返回生产力和利用率的数字

如何使查询仅搜索生产力和利用率


链接在这里:

在这种情况下,应用程序脚本将是一个更好的解决方案。以下代码的工作原理如下:

  • 从列D和列A中获取名称
  • 对于D列的每个名称,它将与A列的每个名称进行比较(即2)
  • 如果名称一致(第一个),它将检查列A名称的背景色(第二个If),以累积总生产量和总使用量
  • 到达A列末尾后,将D中每个名称的值写入Total Prod和Total Util(E列和F列)
  • 每次打开工作表时,
    函数onOpen(){//都将运行
    //获取活动的电子表格和工作表
    设sprsheet=SpreadsheetApp.getActiveSpreadsheet();
    let sheet=sprsheet.getActiveSheet();
    var lastRow=sheet.getLastRow();
    var getNames=sheet.getRange(3,1,lastRow).getValues();//从第2行第1列到最后一行的名称
    var totalNames=sheet.getRange(“D4:D5”).getValues();//更改更多名称的范围
    让prodColor='#f2f4f7';//图形中名称背景色的十六进制代码
    设utilColor='#cfe2f3'//
    对于(var i=0;i
    注意:您必须手动运行代码,并在第一次运行时接受权限。之后,每次打开工作表时,它都会自动运行。代码运行和在工作表上反映更改可能需要几秒钟的时间

    为了更好地理解循环和二维数组,我建议您看看

    参考资料


    通过以下操作,您可以了解有关应用程序脚本和工作表的更多信息

    嗨,你的问题解决了吗?因为我在不同的单元格中看到了生产力和利用率值。不,很遗憾,这只是正常的查询。我需要一个关于生产率和利用率的公式。好的,我还看到这些表是连续重复的。我想你希望每个公式都能搜索到所有公式,区分生产率和利用率,对吗?如果它们位于不同的列上,而不是位于同一列中,那么这将简单得多。否则应用程序脚本将是这里的最佳解决方案。是的,你说得对。很遗憾,我没有那么好的编码经验,无法从应用程序脚本开始。你有什么学习资源可以让我达到非常高的noob水平吗?非常感谢Jescaneles
    function onOpen() { //Will run every time you open the sheet
    
      //Gets the active Spreadsheet and sheet
      let sprsheet = SpreadsheetApp.getActiveSpreadsheet();
      let sheet = sprsheet.getActiveSheet();
    
      var lastRow = sheet.getLastRow();
    
      var getNames = sheet.getRange(3, 1, lastRow).getValues(); //Names from row 2, col 1, until the last row
      var totalNames = sheet.getRange("D4:D5").getValues(); //Change the range for more names
    
      let prodColor = '#f2f4f7'; //hexadecimal codes of the background colors of names in A
      let utilColor = '#cfe2f3'; //
    
      for (var i = 0; i < totalNames.length; i++) {
    
        var totalProd = 0, totalUtil = 0; //Starts at 0 for each name in D
    
        for (var j = 0; j < getNames.length; j++) {
    
          if (totalNames[i][0] == getNames[j][0]) {
    
            if (sheet.getRange(j + 3, 1).getBackgroundObject().asRgbColor().asHexString() == prodColor) { //if colors coincide
    
              totalProd += sheet.getRange(j + 3, 2).getValue();
    
            } else if (sheet.getRange(j + 3, 1).getBackgroundObject().asRgbColor().asHexString() == utilColor) {
    
              totalUtil += sheet.getRange(j + 3, 2).getValue();
    
            }        
          }      
        }
        sheet.getRange(i+4, 5, 1 ,2).setValues([[totalProd, totalUtil]]);
    
      }  
    }