Копировать часть строки из одной электронной таблицы Google в другую электронную таблицу на основе значения в ячейке? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь написать скрипт для копирования столбца B: K определенной строки на основе того, имеет ли столбец 11 (K) букву "Y".

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

Ниже приведен сценарий до сих пор ... хотел бы помочь!

function onEdit() {

  var sss = SpreadsheetApp.openById("15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc").getSheetByName("2018 2 Week Snapshot for Jim"); // sss = source spreadsheet
  var r = sss.getActiveRange();
  if(sss.getName() == "2018 2 Week Snapshot for Jim" && r.getColumn() == 11 && r.getValue() == "Y") {
    var row = r.getRow();
    var numColumns = sss.getLastColumn();
    var tss = SpreadsheetApp.openById("1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So"); // tss = target spreadsheet
    var targetSheet = tss.getSheetByName("Test Sheet"); // ts = target sheet
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    tss.getRange(row, 1, 1, numColumns).copyTo(target);
}

}

Это мой новый код, все еще с трудом:

function onEdit() {

 var sss = SpreadsheetApp.openById('15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc'); // sss = source spreadsheet
  var ss = sss.getSheetByName('2018 2 Week Snapshot for Jim'); // ss = source sheet
  var SRange = ss.getRange("C:K");


if(ss.getName() == "2018 2 Week Snapshot for Jim" && SRange.getColumn() == 9 && SRange.getValue() == "y") {
    var row = SRange.getRow();
    var numColumns = ss.getLastColumn();
    var tss = SpreadsheetApp.openById('1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So'); // tss = target spreadsheet
  var ts = tss.getSheetByName('Test Sheet'); // ts = target sheet
  var target = ts.getRange(ts.getLastRow() + 1, 1);
    ss.getRange(row, 1, 1, numColumns).SetValues(target);


}

}

1 Ответ

0 голосов
/ 31 августа 2018
  • Когда пользователи помещают y или Y в столбец K на листе 2018 2 Week Snapshot for Jim в активной электронной таблице, вы хотите скопировать только значения B:K в последнюю строку на листе " Тестовый лист »на электронную таблицу 1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So.
    • Таблица 15RWoaW8tRLVGOTDrZvBLJwx0beWEsV3x8pfwGe2zMfc является активной таблицей.

Если мое понимание верно, как насчет этой модификации?

Модификация poonts:

  • set из setValues() в нижнем регистре.
  • values из setValues(values) - это 2-х мерный массив.
    • Диапазон для setValues(values) - это диапазон для ввода значений.
  • Когда вы используете onEdit(), вы можете использовать объект события.

Сценарий, который отражен выше, выглядит следующим образом.

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

function myFunction(e) {
  var sourceSheetName = "2018 2 Week Snapshot for Jim";
  var destinationSpreadsheetId = "1dSJOOw_oLVc6Nf-C0MY9715tZGuh69kR6-j_m8EJ-So";
  var destinationSheetName = "Test Sheet";

  if (e.source.getSheetName() == sourceSheetName && e.range.getA1Notation()[0] == "K" && e.value.toUpperCase() == "Y") {
    var sourceValues = e.source.getRange("B:K").getValues().filter(function(e){return e.filter(String).length > 0});
    var tss = SpreadsheetApp.openById(destinationSpreadsheetId);
    var ts = tss.getSheetByName(destinationSheetName);
    ts.getRange(ts.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
  }
}

Примечание:

  • Перед использованием этого сценария установите myFunction() в качестве устанавливаемого триггера.

Ссылки:

Если я неправильно понимаю вашу ситуацию, извините.

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