Google App脚本-TypeError:无法从未定义中读取属性“ 0”。 (第7行,文件“代码”)

时间:2018-12-10 01:02:05

标签: vba google-apps-script

我正在尝试将自定义功能从excel VBA转换为App Scrip。

Public Function Objective(sv As Variant, y As Variant, x As Variant) As Variant

    sum1 = 0
    sum2 = 0
    For i = 1 To 15
        For j = 1 To 15

            sum2 = sum2 + sv(i) * sv(j) * y(i) * y(j) * (x(i, 1) * x(j, 1) + x(i, 2) * x(j, 2) + x(i, 3) * x(j, 3))

        Next j
        sum1 = sum1 + sv(i)
    Next i

    Objective = sum1 - 0.5 * sum2

End Function

这是我作为Google App脚本的脚本

 function OBJECTIVE(sv, y, x) {
  var sum1=0;
  var sum2=0;

  for(var i=0; i<15; i++){
    for(var j=0; j<15; j++){
      sum2=sum2+sv[i]*sv[j]*y[i]*y[j]*(x[i][1]*x[j][1]+x[i][2]*x[j][2]+x[i][3]*x[j][3]);
    }
    sum1=sum1+sv[i];
  }
  objective=sum1-0.5*sum2;
}

但是我在sum2=sum2+sv[i]*sv[j]*y[i]*y[j]*(x[i][1]*x[j][1]+x[i][2]*x[j][2]+x[i][3]*x[j][3]);这行上说TypeError: Cannot read property "0" from undefined. (line 7, file "Code")时出错。我没有看到语法上的任何问题,可能是什么原因?

1 个答案:

答案 0 :(得分:0)

我知道这不是您问题的答案,但我认为它可以帮助您充分了解Apps Script数组,以便您可以找出其余的内容。只需复制它即可根据需要更改工作表名称。它将识别出三个范围并将它们的索引放在每个单元格中。

function playingWithArrays(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('SHEETNAME');
  sh.clear();
  var rg1=sh.getRange('A2:C16');
  rg1.setBackground('lightyellow');  
  var rg2=sh.getRange('D2:D16');
  rg2.setBackground('lightblue');
  var rg3=sh.getRange('F2:F16');
  rg3.setBackground('lightgreen');
  var vA=rg1.getValues();
  var vB=rg2.getValues();
  var vC=rg3.getValues();
  for(var i=0;i<vA.length;i++){
    for(var j=0;j<rg1.getWidth();j++){
      vA[i][j]=Utilities.formatString('[%s][%s]',i,j);
    }
  }
  for(var i=0;i<vB.length;i++){
    for(var j=0;j<rg2.getWidth();j++){
      vB[i][j]=Utilities.formatString('[%s][%s]',i,j);
    }
  }
  for(var i=0;i<vC.length;i++){
    for(var j=0;j<rg2.getWidth();j++){
      vC[i][j]=Utilities.formatString('[%s][%s]',i,j);
    }
  } 
  sh.getRange('A1').setValue(rg1.getA1Notation());
  rg1.setValues(vA);
  sh.getRange('D1').setValue(rg2.getA1Notation());
  rg2.setValues(vB);
  sh.getRange('F1').setValue(rg3.getA1Notation());
  rg3.setValues(vC);
}

别忘了单元格函数必须返回一个值。像return sum;