Как импортировать данные из указанного столбца c в нескольких таблицах в одну таблицу с помощью скрипта Apps? - PullRequest
0 голосов
/ 23 января 2020

Я вообще не занимаюсь программированием, поэтому прошу вашей помощи, ребята). У меня есть групповой проект с моими учениками. Каждый из них получил свой рабочий шаблон в таблице с индивидуальными данными. Мне нужно работать со всеми этими данными, которые они собирают каждый день, объединенными в одном месте. Поэтому я создал формулу ниже:

=query({
    importrange("spreadsheetSheetId1","sheetName!sheetRange");
    importrange("spreadsheetSheetId2","sheetName!sheetRange");
    importrange("spreadsheetSheetId3","sheetName!sheetRange");
    importrange("spreadsheetSheetId4","sheetName!sheetRange");
    importrange("spreadsheetSheetIdn","sheetName!sheetRange")
    },"Select * Where Col2 is not NULL")

Но есть проблема: на данный момент у меня уже есть 60 электронных таблиц, и это делает мой файл очень медленным. Кроме того, я получаю ошибки при обновлении импорта и не могу работать со всеми собранными данными.

Можете ли вы помочь мне создать скрипт, который будет выполнять ту же работу, что и моя формула запроса, и он будет работать 2 раза в день по расписанию?

1 Ответ

0 голосов
/ 24 января 2020

Вы можете достичь желаемого, используя Apps Scripts основанные на времени триггеры .

Однако вам все равно придется кодировать функцию, чтобы получить диапазоны данных вашего ученика; который будет запускаться при запуске триггера.

Один пример:

  1. Создать связанный скрипт из электронной таблицы, где вы соберете все извлеченные данные («Управление Электронная таблица "или" CS "для краткости).
  2. Вы должны предоставить идентификаторы или имена электронных таблиц учащегося, чтобы получить каждый из них. (например, лист, на котором ученики сопоставляются с их листами данных)
  3. Вы также хотите, чтобы лист собирал все данные в вашей CS. (Я назвал это, pause !, drumroll, "WorkSheet!").
  4. Напишите функцию, которая выбирает данные и вставляет их в ваш WorkSheet. Сделайте это для каждой таблицы в списке.

напр.

function getStudentsData(){

  // Get control spreadsheet
  var controlSS = SpreadsheetApp.getActiveSpreadsheet(); 

  // Activate work sheet
  var teacherWorkSheet = controlSS.getSheetByName('WorkSheet').activate();

  // Remove old data in work sheet
  prepWorkSheet(teacherWorkSheet);

  // Fetch data from every student's sheet
  /* 
  * For this example the students sheets are in the same control spreadsheet,
  * and are named "Student1,Student2,..." and so on. In your case, supply a 
  * list of student spreadsheets as per your requirements.
  */
  var list_length = 4; // The length of your students spreadsheets array (~ 60).
  var startRow = 1;  // Omit headers in destination

  for (var i = 1; i < list_length; i++){

    // Get student sheet
    var studentSheet = controlSS.getSheetByName('Student'+i);

    // Get Student's data range
    var studentDataRange = studentSheet.getDataRange();

    // Omit headers in student's data
    studentDataRange = studentDataRange.offset(1, 0, studentDataRange.getLastRow()-1);

    // Copy the values  and paste them to the control spreadsheet 
    studentDataRange.copyValuesToRange(teacherWorkSheet,1,
                                       studentDataRange.getLastColumn(), 
                                       startRow, 
                                       startRow + studentDataRange.getLastRow());

    // Assign new starting row for pasting data
    startRow = teacherWorkSheet.getDataRange().getLastRow() + 1; 
  }
}

function prepWorkSheet(sheet){

  // Wipe destination sheet for example...
  sheet.getDataRange().deleteCells(SpreadsheetApp.Dimension.ROWS);
}

Вручную добавьте основанный на времени триггер для выполнения getStudentData() каждые 12 часов (с учетом ваших потребностей). Наслаждайтесь программированием;)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...