Этот вопрос похож на «Манипуляции с данными форм в Google Sheets» (https://webapps.stackexchange.com/questions/88736/forms-data-manipulation-in-google-sheets), но требует немного большей автоматизации:
Справочная информация: пользователи заполняют форму Google для запроса и получаютвозможность повторить те же вопросы, чтобы заполнить второй, третий, четвертый и пятый запрос. Я создал лист, который будет манипулировать этими строками, чтобы строки с одинаковыми столбцами были перенесены в один столбец.
Здесьмой пример листа: https://docs.google.com/spreadsheets/d/11DM7z_vwuR1S6lgMN7Wu7a0GoouVc2_5xj6nZ1Ozj5I/edit#gid=1967901028
Ответы формы : лист, который возвращает ответы пользователей, заполнивших форму
Манипулируемые строки: лист, которыйвозвращает измененные строки, используя: = OFFSET («Ответы формы»! $ A $ 2, потолок ((row () - строка ($ B $ 1)) / 5,1) -1, column () - столбец ($ B $ 1),1, COUNTA ($ B $ 1: $ D $ 1)) в ячейке B2, и
= OFFSET («Ответы формы»! $ A $ 2, потолок ((row () - строка)($ B $ 1)) / 5,1) -1, мод (строка () - (строка ($ B $ 1) + 1), 5) * СЧЕТЗ ($ E $ 1: $ N 1) + СЧЕТЗ ($ B $ 1: $ D $ 1), 1, COUNTA ($ E $ 1: $ N $ 1)) в ячейке E2
В прошломe Значения : этот лист возвращает значения вставки Манипулированные строки , исключая формулу смещения и затем удаляя все строки с пустыми ячейками EN.Вот скрипт приложений, отраженный на вкладке «Вставить значения»:
var ss = SpreadsheetApp.getActive();
var sheet = SpreadsheetApp.getActiveSheet();
//Duplicate sheet 'Manipulated Rows' as paste values
function moveValuesOnly() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Paste Values');
var source = ss.getRange('Manipulated Rows!A1:T100000');
source.copyTo(ss.getRange('Paste Values!A1'), {contentsOnly: true});
deleteRows(sheet);
}
//Function to Delete empty rows:
function deleteRows(sheet) {
var rows = sheet.getDataRange();
var range_manipulated_rows = ss.getSheetByName('Manipulated Rows!A1:T100000');
var range_paste_values = ss.getSheetByName('Paste Values!A1:T100000');
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (range_manipulated_rows == range_paste_values && row[4] == '' && row[5] == '' && row[6] == '' && row[7] == '' && row[8] == '' && row[9] == ''
&& row[10] == '' && row[11] == '' && row[12] == '' && row[13] == '') { // if paste values tab is equal to manipulated rows tab and cell E-N are blank
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
};
Я хочу сделать это более автоматизированным, создав скрипт приложений, который будет непосредственно преобразовывать лист «Ответов формы» влист «Вставить значения» без использования манипулируемых строк.Как и в листе «Вставить значения», необходимо удалить все строки, в которых все ячейки EN пусты.