【问题标题】:Query an Array in Google Script在 Google Script 中查询数组
【发布时间】:2018-12-05 21:00:41
【问题描述】:

我已经学会了如何在 Google 表格中使用查询公式。我想知道 Google App Script 中是否有类似的功能。我想查看一个二维数组并找到变量相交的值。

考虑一个数组,其中每一行都有一个名称,每一列都有一个月份。十字路口有一些美元金额。我需要编程语言来说明,行(Nate)、列(11 月)的值是多少?

https://docs.google.com/spreadsheets/d/1vd7hgRVNTtIvKrr2ssLzVoDw5IVaXjOjF39CvVm2cYQ/

我知道如何使用 for 循环来做到这一点。我想知道是否有更简单的方法。我希望有 array.FindValueAtCoordinates(rowkey,colkey)。

【问题讨论】:

  • 我可以问你关于你的问题吗? 1. 您想使用 Google Apps 脚本从列标题(第 1 行)和行标题(A 列)中检索一个值。我的理解正确吗? 2. 可以提供array.FindValueAtCoordinates(rowkey,colkey)的详细信息吗? 3. 您的共享电子表格中似乎没有包含该脚本。如果你有剧本,请给我们看。
  • 您仍然可以使用查询公式。查询公式在后台利用了 Google 的可视化 API。我编写了一个 Google Apps 脚本模块来做同样的事情。您可以查看at this link

标签: google-apps-script


【解决方案1】:

试试这个:

这将在第一列和行号中的名称之间以及列标题和列号之间创建一个关联数组。

function testIntersection(){
  var r='Ken';
  var c='Dec18';
  Logger.log(intersection(r,c));
}

function intersection(r,c){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet18');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var colObj={};
  var rowObj={};
  for(var i=0;i<vA.length;i++){
    if(i==0){
      for(var j=0;j<vA[0].length;j++){
        if(vA[i][j] && !colObj.hasOwnProperty(vA[i][j])){
          colObj[vA[i][j]]=j+1;
        }
      }
    }
    if(vA[i][0] && !rowObj.hasOwnProperty(vA[i][0])){
      rowObj[vA[i][0]]=i+1;
    }
  }  
  return sh.getRange(rowObj[r],colObj[c]).getValue();           
}

确保您的第一行列标题格式为纯文本。否则它们可能会被解释为 auto 中的日期,并且没有函数 getRange(string, class)。

这只是我用来测试上述功能的一些代码。使用与您类似的表。它会生成一个无模式对话框,其中列出了所有可能的交叉点。

function playingWithIntersection(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet18');
  var rg1=sh.getRange(1,2,1,sh.getLastColumn()-1);
  var rg2=sh.getRange(2,1,sh.getLastRow()-1,1);
  var ckeys=rg1.getValues();
  var rkeys=rg2.getValues();
  var colkeys=[];
  var rowkeys=[];
  for(var i=0;i<ckeys[0].length;i++){
    colkeys.push(ckeys[0][i]);
  }
  for(var i=0;i<rkeys.length;i++){
    rowkeys.push(rkeys[i][0]);
  }
  var hl='<style>th,td{border:1px solid #000;}</style><table><th>rowkeys</th><th>colkeys</th><th>Value</th><tr></tr>';
  for(var i=0;i<rowkeys.length;i++){
    for(var j=0;j<colkeys.length;j++){
      hl+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td></tr>', rowkeys[i], colkeys[j], intersection(rowkeys[i],colkeys[j]));
    }
  }
  hl+='</table>';
  var ui=HtmlService.createHtmlOutput(hl);
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Intersections')
}

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多