Google App Script - TypeError: Невозможно прочитать свойство "0" из неопределенного.(строка 7, файл «Код») - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь преобразовать пользовательскую функцию из 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 Script

 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 голосов
/ 10 декабря 2018

Я знаю, что это не ответ на ваш вопрос, но я думаю, что это поможет вам достаточно хорошо понять массивы скриптов приложений, чтобы вы могли понять все остальное.Просто скопируйте его и измените название листа по мере необходимости.Он определит три диапазона и поместит их индексы в каждую ячейку.

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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...