Переместить 2 столбца данных на другую вкладку, когда выбран статус - PullRequest
0 голосов
/ 02 июля 2019

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

Я хочу добиться того, чтобы в столбце Z на вкладке ProspectiveSites было выбрано «Да», чтобы затем переместить столбцы 15 и 24 на июль 2019 года в столбцы А и В и ввести над строкой «Итого». В настоящее время он находится в строке 28, но перемещается вверх или вниз по мере необходимости.

Если это вообще возможно, я бы хотел, чтобы он двигался в зависимости от текущего месяца, то есть сейчас июль, чтобы переместить эту вкладку в июле2019, в августе - в август2019 и т. Д.

Я получаю эту ошибку при попытке запустить скрипт; Ошибка типа: невозможно прочитать свойство «диапазон» из неопределенного. (строка 3, файл «Код»)

Вот образец https://docs.google.com/spreadsheets/d/1q2nJ0A-GBqRFxtLl3tTk-AFzYQU-NU5w_gqYt5C4xVs/edit?usp=sharing

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSheet();
  if (ss.getName() == 'ProspectiveSites' && e.range.getColumn() == 
26) {
    // Copy selected row to another sheet
    var targetSheet = 
SpreadsheetApp.getActive().getSheetByName('July2019');
    var copyColumns = [15, 24];  // Column indices start with 1
    if (e.range.getValue() == 'Yes') {
      var row = e.range.getRow(), 
          targetData = [];
      var rowData = e.range.offset(0, 0, 1, 
    ss.getDataRange().getLastColumn()).getValues()[0];
      for (var i in rowData) {
        if (copyColumns.indexOf(parseInt(i) + 1) > -1) {
          targetData.push(rowData[i]);
        } else {
          targetData.push('');
        }
      }
      while (targetData[targetData.length - 1] == '') 
targetData.pop();
      Logger.log(rowData);
      Logger.log(targetData);
      row = targetSheet.getDataRange().getLastRow() + 1;
      targetSheet.getRange(row, 1, 1, 
targetData.length).setValues([targetData]);
    }
  }
}

Вся помощь очень ценится Лучший, J

1 Ответ

1 голос
/ 02 июля 2019

Триггер onEdit(e) запускается автоматически при изменении значения любой ячейки в электронной таблице .

Значение e, которое передается функции, является объектом события, который предоставляет информацию о функции, чтобы она могла ответить. В этом случае объект будет содержать {authMode=LIMITED, range=Range, source=Spreadsheet, user=username@domain.com, value=updatedvalue}, который вы можете увидеть, если запустить Logger.log(e) в функции onEdit(e).

Похоже, вы пытаетесь перегрузить эту проблему. На самом деле все, что вам нужно - это получить значение для строки, редактируемой выпадающим списком, и скопировать соответствующие ячейки O и X на лист июля2019 года:

function obtainFirstBlankRow() {  

  var sheet = SpreadsheetApp.getActive().getSheetByName('July2019');
  // search for first blank row
  var col = sheet.getRange('A:A');
  var vals = col.getValues();
  var count = 0;

  while (vals[count][0] != "") {
    count++;
  }
  return count + 1;
}

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSheet();

  if (ss.getName() == 'ProspectiveSites' && e.range.getColumn() == 26) {

    if (e.range.getValue() != 'Yes'){
      return;
    }

    var sourceSheet = SpreadsheetApp.getActive().getSheetByName('ProspectiveSites');
    var targetSheet = SpreadsheetApp.getActive().getSheetByName('July2019');

    var cell15 = sourceSheet.getRange('O' + e.range.getRow() + ':O' + e.range.getRow()).getValue();
    var cell24 = sourceSheet.getRange('X' + e.range.getRow() + ':X' + e.range.getRow()).getValue();

    var row = obtainFirstBlankRow();    
    targetSheet.getRange(row, 1).setValue(cell15);
    targetSheet.getRange(row, 2).setValue(cell24);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...