【问题标题】:Google Script cannot Read Property "0"Google 脚本无法读取属性“0”
【发布时间】:2017-06-10 04:11:35
【问题描述】:

我正在尝试编写一个代码来查看工作表 sheet1 中单元格 A3 的值,并检查它是否存在于工作表 sheet2 的 A 列中。

发生的事情是它只有在有相应的值时才起作用。否则,我会收到以下错误消息:

TypeError: Cannot read property "0" from undefined. (line 14, file "testing2")

这是我的代码:

function findInColumn(column, id) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var columntosearch = ss.getRange('TABELA DE HISTORICO DE PAGAMENTOS!A:A');
  var id = ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOSINDIRETOS!A3').getValue();

  var values = columntosearch.getValues();
  var row = 0;
  while (values[row] && values[row][0] !== id) {
    row++;
  }

  if (values[row][0] === id)
    ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!A3').copyTo(ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!A6'), {contentsOnly:true});
  else
    ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!D3').copyTo(ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!D6'), {contentsOnly:true});
}

【问题讨论】:

    标签: javascript google-app-engine google-apps-script


    【解决方案1】:

    我认为 Javascript 方法 indexOf 会在这里帮助你。这是文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf?v=control

    为了帮助你,我稍微修改了你的代码。有 cmets inline 来解释变化。

    function findInColumn(column, id) {
      var ss  = SpreadsheetApp.getActiveSpreadsheet();
    
      //getValues returns a multidimensionalarray, so i am using reduce to flatten it
      var columntosearch = ss.getRange('TABELA DE HISTORICO DE PAGAMENTOS!A:A')
        .getValues()
        .reduce(function(a, b) {return a.concat(b);});
    
      var id = ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOSINDIRETOS!A3').getValue();
    
      //indexOf returns the index where the id is found or -1 if it isn't found
      var isInColumn = columntosearch.indexOf(id);
    
      //check that isInColumn is not -1
      if(isInColumn > -1) 
        ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!A3').copyTo(ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!A6'), {contentsOnly:true});
      else 
        ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!D3').copyTo(ss.getRange('TABELA CALCULADORA RETENCAO IMPOSTOS INDIRETOS!D6'), {contentsOnly:true});
    }
    

    希望有帮助!

    【讨论】:

    • 乔丹,它工作得很好!感谢您的帮助!
    • 好消息!很高兴为您提供帮助
    • 嗨 Jordan,问题:当满足 if 条件时,我需要在工作表 2 中的列范围 I:O 中将其值替换为“0.00”。一整天都在寻找解决方案,但我认为我的大脑冻结了。你能帮我一把吗,或者告诉我我应该找什么?
    • isInColumn 的值是找到该值的行的索引。您可以使用它来获取该特定行上列的范围并以这种方式设置值。
    【解决方案2】:
    function valueOfA3insheet1inColumnAsheet2()
    {
      var ss=SpreadsheetApp.getActive();
      var sht1=ss.getSheetByName('sheet1');
      var rng1=sht1.getRange('A3');
      var valueinA3 = rng1.getValue();
      var sht2=ss.getSheetByName('sheet2');
      var rng2=sht2.getRange('A:A');
      var rng2A=rng2.getValues();
      var s='<table border="1"><tr><th>Value</th><th>Cell</th></tr>';
      for(var i=0;i<rng2A.length;i++)
      {
        if(rng2A[i][0]==valueinA3)
        {
          var r = sht2.getRange(i+1,1,1,1).getA1Notation();
          s+='<tr><td>' + rng2A[i][0] + '</td><td>' + r + '</td></tr>'
        }
      }
      s+='</table>';
      var html=HtmlService.createHtmlOutput(s);
      SpreadsheetApp.getUi().showModelessDialog(html, 'Values Found')
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多