Перемещение данных с помощью кнопки, но только истинные записи в ответе формы Google

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-sheets

Вопрос:

У меня есть данные в «Форме ответов 1». Я хочу переместить данные с листа «Ответы формы 1» на лист «Проверенный ответ формы». Условие состоит в том, что должны перемещаться записи, помеченные как True в столбце W, а не все записи.

Ссылка на лист:

https://docs.google.com/spreadsheets/d/1LUUEZ7sSjBy-WWL3TZt8l6sqtrEBn3dZ03iRDTY1bF0/edit?usp=sharing

Код, который я использую, это:

 function copyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Form responses 1");
  var pasteSheet = ss.getSheetByName("Sheet5SS");
  
  var pasteSheet_size=pasteSheet.getRange('A2:A').getValues().filter(String).length;
  var source_size=copySheet.getRange('A2:A').getValues().filter(String).length;
  var source_range = copySheet.getRange(1,1,source_size,copySheet.getLastColumn());

  var move_data = source_range.getValues().filter(row=>row[23]==true);
  var source_data = source_range.getValues().filter(row=>row[23]==false);
  pasteSheet.getRange(pasteSheet_size 1,1,move_data.length,move_data[0].length).setValues(move_data);
  
  source_range.clearContent();
  copySheet.getRange(1,1,source_data.length,source_data[0].length).setValues(source_data);
        
}

  

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

1. Привет, не могли бы вы сообщить мне, решил ли мой ответ вашу проблему, чтобы я мог изменить его, если это не так? Спасибо

Ответ №1:

Объяснение:

Вы очень близки.

  • Вам нужно начать диапазон со второй строки:

    copySheet.getRange(2,1,source_size,copySheet.getLastColumn());

  • и флажки находятся в столбце W, следовательно, в столбце номер 22:

    filter(row=>row[22]==true);


Решение:

 function copyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var copySheet = ss.getSheetByName("Form responses 1");
  var pasteSheet = ss.getSheetByName("Verified Form Responses");
  
  var pasteSheet_size=pasteSheet.getRange('A2:A').getValues().filter(String).length;
  var source_size=copySheet.getRange('A2:A').getValues().filter(String).length;
  var source_range = copySheet.getRange(2,1,source_size,copySheet.getLastColumn());

  var move_data = source_range.getValues().filter(row=>row[22]==true);
  var source_data = source_range.getValues().filter(row=>row[22]==false);
  pasteSheet.getRange(pasteSheet_size 1,1,move_data.length,move_data[0].length).setValues(move_data);
  
  source_range.clearContent();
  copySheet.getRange(2,1,source_data.length,source_data[0].length).setValues(source_data);
        
}
  

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

1. docs.google.com/spreadsheets/d/… Этот скрипт не удаляет строку из листа ответов формы. Когда пользователь отправляет данные с помощью формы Google, они появляются после записей, которые были перемещены, а также этот скрипт не работает нормально. Осталось две записи, которые не перемещаются, и этот скрипт показывает ошибку.

2. Также этот лист доступен пользователю. Когда он нажимает на кнопку отправки, этот скрипт не запускается.

3. А также при копировании данных иногда он копирует данные в проверенной форме, где данные уже существуют

4. @Admin-RKPareekCo Привет. Когда я создавал этот код, я не знал, что используемый вами исходный лист — это лист ответов формы. Последний не работает как обычный лист. Когда пользователь отправляет форму, данные не обязательно добавляются в последнюю строку, но в строку после последней отправки. Было сделано. Это означает, что нам нужно удалять строку каждый раз, когда мы перемещаем данные. Но это не входило в рамки этого вопроса. Не могли бы вы опубликовать новый вопрос по этой проблеме? А именно, как переместить записи ответа формы на другой лист или что-то в этом роде. Спасибо 🙂

5. Я опубликовал новый вопрос