Скрипт Sheets для копирования частей строки на основе значения Cell - PullRequest
1 голос
/ 10 октября 2019

Итак. Это должно быть просто, и я могу делать то, что мне нужно (= QUERY (MAIN! A: H, "выберите A, C, F, где H = 'OPEN'") Но я не могу сортировать или редактировать. Поэтому я пытаюсьсделать скрипт, который копирует с вкладки «ГЛАВНАЯ» на вкладку «ОТКРЫТЬ» Просто столбец А, С или F, когда столбец H изменяется на ОТКРЫТО. Мне нужно поставить его на триггер, чтобы информация оставалась на открытой вкладкеи я могу отредактировать и отсортировать его. Проблема в том, что я плохо разбираюсь в сценариях и не могу понять, как это сделать, только столбцы A, C и F. У меня пока есть.

https://docs.google.com/spreadsheets/d/11PfKqDhQnBkDM9qIw3CjVUa9-fOTTVg51TzWzHXUo5w/edit?usp=sharing

  function CopyDataToNewFile() {
var sourceSheet = SpreadsheetApp.openById('11PfKqDhQnBkDM9qIw3CjVUa9-fOTTVg51TzWzHXUo5w').getSheetByName('MAIN'),
    sourceValues = sourceSheet.getRange(4, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn()).getValues(),
    targetSheet = SpreadsheetApp.openById('11PfKqDhQnBkDM9qIw3CjVUa9-fOTTVg51TzWzHXUo5w').getSheetByName('OPEN');
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
sourceSheet.getRange(6, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn())

}

1 Ответ

2 голосов
/ 10 октября 2019

РЕДАКТИРОВАТЬ:

Если вы не хотите, чтобы сценарий запускался автоматически при редактировании столбца Status из MAIN, используйте эту функцию вместо:

function CopyDataToNewFile() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MAIN');
  var values = sourceSheet.getDataRange().getValues();
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OPEN');
  targetSheet.clear();
  for(var i = 1; i < values.length; i++) {
    if(values[i][7] == 'OPEN') {
      var dataA = values[i][0];
      var dataC = values[i][2];
      var dataF = values[i][5];
      targetSheet.appendRow([dataA, dataC, dataF]);    
    }
  }
}

===============================================

Если вы хотите, чтобы скрипт запускался каждыйвременной столбец H отредактирован, используйте это ниже. Сценарий ничего не делает, если отредактированная ячейка взята из столбца H из MAIN, поэтому не беспокойтесь о редактировании в OPEN при изменении данных из MAIN.

Все данные копируются в первые 3 столбца вкладки ОТКРЫТО. Кроме того, все предыдущие данные на вкладке ОТКРЫТО удаляются перед копированием:

function onEdit(e) {
  var sourceSheet = e.source.getActiveSheet();
  var sheet_name = sourceSheet.getName();
  var column = e.range.getColumn();
  if(sheet_name == 'MAIN' && column == 8) {
    var values = sourceSheet.getDataRange().getValues();
    CopyDataToNewFile(values);
  }
}

function CopyDataToNewFile(values) {
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OPEN');
  targetSheet.clear(); // This clears previous data in OPEN tab, delete this line if you don't want this to happen.
  // Looping through each row in MAIN tab
  for(var i = 1; i < values.length; i++) {
    // Checking if column H value is 'OPEN'
    if(values[i][7] == 'OPEN') {
      // Getting values from A, C, F columns
      var dataA = values[i][0];
      var dataC = values[i][2];
      var dataF = values[i][5];
      targetSheet.appendRow([dataA, dataC, dataF]);    
    }
  }
}

Я надеюсь, что это именно то, что вы хотели сделать, и мне очень жаль, если я неправильно понял вашу цель.

...