Получение определенных строк из другого листа Google с помощью сценария приложения на основе нескольких значений ячеек

#google-apps-script #google-sheets

Вопрос:

Я хотел бы получить данные из другого листа Google, а затем получить все столбцы(успешно с этим). Что касается строк, я хотел бы получить только все строки с этими значениями «Mrm1, Mrm2, Mrm3» из столбца измерения.

Например, у меня есть эти данные на другом листе,Исходные данные

И на другом листе я хочу, чтобы результат был таким: Ожидаемые полученные данные

До сих пор у меня есть это, но я не уверен, как применить то, что мне нужно, к строкам. Этот скрипт извлекает все.

 function Country A() {    var sss = SpreadsheetApp.openById("19-idD8PWuNxnvzRVqBlKhju2RkKxOe8nUQaf9ZMAcgk"); // Source spreadsheet - replace with actual key  var ss = sss.getSheetByName('Compiled'); // Source sheet - change to actual name    var numRows = ss.getLastRow() // get last row with data  var numColumn = ss.getLastColumn(); // get last column with data   var srange = ss.getRange(2,1,numRows,numColumn); // Source range - change to actual range  var values = srange.getDisplayValues();      var lss = SpreadsheetApp.getActiveSpreadsheet(); // Local spreadsheet - the one this script is in  var targetnumRows = lss.getSheetByName('Country A').getMaxRows();  var targetnumcolumns = lss.getSheetByName('Country A').getMaxColumns();    var ls = lss.getSheetByName('Country A').getRange(2,1,numRows,numColumn); // Local sheet - change to actual name and Local range - change to actual range  var TargetRange = lss.getSheetByName('Country A').getRange(2,1,targetnumRows,targetnumcolumns); // Local sheet - change to actual name and Local range - change to actual range    TargetRange.clear() //Clear Sheet Content  ls.setValues(values); // Copy from source sheet to local sheet  var sheet = lss.getSheetByName('Country A');  var maxColumns = sheet.getMaxColumns();  var lastColumn = sheet.getLastColumn();  var maxRows = sheet.getMaxRows();  var lastRow = sheet.getLastRow();    if (maxColumns-lastColumn != 0){sheet.deleteColumns(lastColumn 1, maxColumns-lastColumn)};  if (maxRows-lastRow != 0){sheet.deleteRows(lastRow 1, maxRows-lastRow)};  var TargetHour = lss.getSheetByName('Country A').getRange(1,1).setValue(Utilities.formatDate(new Date(), "CST", "MM-dd-yyyy HH:mm:ss"));    } 

Пожалуйста, помогите мне. Спасибо.

Ответ №1:

Скрипт хранит значения в 2D-массиве. Вы должны выполнить итерацию по элементам и удалить элементы, в которых столбец E (Col номер 4) (A=0, B=1,…E=4) не равен «Mrm1, Mrm2, Mrm3». Затем вы вставляете измененный массив на второй лист.

Вот пример. Вам нужно адаптировать его к вашему коду.

 function copyData() {  var ss = SpreadsheetApp.openById("YOUR-ID");   // Stores data as a 2D Array  var data = ss.getSheetByName("Sheet1").getRange("A1:M10").getValues();   // Remove rows where column E not equals "Mrm1, Mrm2, Mrm3"  for (var i = 0; i lt; data.length; i  ) {  if (data[i][4] !== "Mrm1" amp;amp; data[i][4] !== "Mrm2" amp;amp; data[i][4] !== "Mrm3") {  data.splice(i,1);  i--;  }  }   // Paste data in sheet 2  var pasteRange = "A1:M"   (data.length);  ss.getSheetByName("Sheet2").getRange(pasteRange).setValues(data); }  

Комментарии:

1. Спасибо, я попробую это сделать.

2. Это действительно работает! Огромное спасибо. Однако целевой диапазон назначения не работает, и он вставляется в первую строку вместо 2-й строки.

3. Измените — «A1:M» (длина данных); — для — «A2:M» (длина данных 1); —

4. это действительно здорово! Большое вам спасибо за вашу помощь. 🙂