#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. это действительно здорово! Большое вам спасибо за вашу помощь. 🙂