Ошибка Google Sheets: параметры (строка) не соответствуют сигнатуре метода для SpreadsheetApp.Sheet.getActiveCell - PullRequest
0 голосов
/ 14 апреля 2020

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

Exception: The parameters (String) don't match the method signature for SpreadsheetApp.Sheet.getActiveRange

Я видел кое-что, что могло бы указывать на то, что, возможно, я не выполняю операции с листа, который назвал, или что оно неправильно выводит значение? Не уверен, что любой совет будет отличным.

Код:

function pullData(){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var inputSheet = ss.getSheetByName("Input");
  var currentSheet = ss.getActiveSheet();
  var dateCell = inputSheet.getActiveCell("C2").getValue();
  var inputRange = inputSheet.getActiveRange("C6:Z999");
  var currentRange = currentSheet.getActiveRange("C6:Z999");

  if (dateCell == currentSheet.getActiveCell("B2").getValue()){
    var inputRows = inputRange.getNumRows();
    var inputCols = inputRange.getNumColumns();
    for (var i = 1; i <= inputRows; i++) {
      for (var j = 1; j <= inputCols; j++) {
        var inputValue = inputRange.getCell(i,j).getValue();
        var currentValue = currentRange.getCell(i,j).setValue(inputValue);
      }
    }
  }
}

1 Ответ

1 голос
/ 15 апреля 2020
  • Когда значение ячейки "C2" листа Input совпадает со значением ячейки "B2 активного листа", необходимо скопировать значения ячеек "C6: Z999" лист Input в ячейки "C6: Z999" активного листа.
  • Вы хотите узнать причину следующего сообщения об ошибке.
    • Exception: The parameters (String) don't match the method signature for SpreadsheetApp.Sheet.getActiveRange

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

Точки изменения:

  • getActiveRange() не имеет аргументов. Но вы используете аргументы. Я думаю, что причина вашего сообщения об ошибке заключается в следующем.
  • Кроме того, getActiveCell() не имеет аргументов. Поэтому в вашем сценарии я думаю, что ошибка происходит в var dateCell = inputSheet.getActiveCell("C2").getValue();. Из этой ситуации я подумал, что ваш проверенный сценарий может отличаться от сценария в вашем вопросе.
  • Когда я увидел поток вашего сценария, я подумал, что ваша цель может быть следующей .
    • Когда значение ячейки "C2" листа Input равно то же самое со значением ячейки "B2 активного листа" необходимо скопировать значения ячеек "C6: Z999" листа Input в ячейки "C6: Z999" активного листа.
    • Если мое понимание верно, getActiveCell("C2"), getActiveRange("C6:Z999") и getActiveCell("B2") могут быть getRange("C2"), getRange("C6:Z999") и getRange("B2") соответственно.

Шаблон 1:

В этом шаблоне ваш скрипт модифицируется для удаления сообщения об ошибке.

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

От:
var dateCell = inputSheet.getActiveCell("C2").getValue();
var inputRange = inputSheet.getActiveRange("C6:Z999");
var currentRange = currentSheet.getActiveRange("C6:Z999");

if (dateCell == currentSheet.getActiveCell("B2").getValue()){
Кому:
var dateCell = inputSheet.getRange("C2").getValue();
var inputRange = inputSheet.getRange("C6:Z9");
var currentRange = currentSheet.getRange("C6:Z9");

if (dateCell == currentSheet.getRange("B2").getValue()){

Шаблон 2:

В этом шаблоне ваш скрипт модифицируется путем уменьшения стоимости процесса. В вашем текущем сценарии getValue() и setValue() используются в для l oop. В этом случае, когда inputRows и inputCols велики, стоимость процесса будет высокой. Поэтому в этом шаблоне я хотел бы предложить снизить стоимость.

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом. В этой модификации значения ячеек "C6: Z999" листа Input копируются в ячейки "C6: Z999" активного листа с использованием copyTo. Таким образом, ваша цель может быть достигнута без использования for l oop.

function pullData(){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var inputSheet = ss.getSheetByName("Input");
  var currentSheet = ss.getActiveSheet();
  var dateCell = inputSheet.getRange("C2").getValue();
  var inputRange = inputSheet.getRange("C6:Z9");
  var currentRange = currentSheet.getRange("C6:Z9");

  if (dateCell == currentSheet.getRange("B2").getValue()){
    inputRange.copyTo(currentRange, {contentsOnly:true});  // Modified
  }
}

Ссылки:

Если я неправильно понял ваш вопрос, и вы не указали ожидаю, я прошу прощения.

...