0

На данный момент у меня есть рабочий лист с именами предыдущих учеников и ID #. На данный момент насчитывается около 3000 записей.Google Script vs Formula - MATCHing Records

На втором листе у меня есть новые имена (которые вводятся через форму).

На данный момент я использую следующее, чтобы проверить, есть ли до записи:

=IFERROR(INDEX(Students!A:A,MATCH(K2, Students!B:B; 0)), "NEW STUDENT") 

Но таблица становится довольно медленно.

Будет ли скрипт google лучше? И если да, то как?

Thanks

ответ

1

Вы можете выбрать другую формулу. Например, в this example spreadsheet я добавил 10 000 строк поддельных данных в Sheet1. Я присоединился к первой колонке имени со второй колонкой имени в ячейке, в Лист2 A1, как показано ниже:

=arrayformula(join(";", Sheet1!B:B & " " & Sheet1!C:C)) 

Затем я могу выполнить текстовый поиск нового имени в эту длинную строку. Например:

=find("Peter Piper"&";", Sheet2!A1) 

Быстро.

+0

Прохладный - и если только студенческие идентификаторы интересны, строка будет короче. В [ограничениях] (https://support.google.com/drive/answer/37603) упоминается, что существуют общие пределы размеров электронных таблиц, но не то, что они есть ... Интересно, насколько большая эта ячейка могла бы получить? (Хотя это решение уже выходит за пределы, упомянутые ранее.) – Mogsdad

+0

Я собираюсь начать с массива, а затем медленно работать над scriptdb, поскольку у меня ограниченные прог-навыки. – user41592

1

"Better"? Это слишком субъективно. Давайте говорить только о производительности.

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

  • Формулы электронных таблиц пересчитываются каждый раз, когда происходит изменение листа. Таким образом, ваш «новый ученик» проверяет студентов, которые у вас уже есть на втором листе, тратит время.

  • Функция триггера представления формы в идеале выполняет поиск в ответ на форму и только для новых данных ученика.

  • Сценарий может использовать ScriptDB хранить все ПРИОР студента имена & идентификаторов, тем самым устраняя необходимость читать Prior студента таблицу снова и снова, и обеспечивая быстрый поиск.

    ... 
    var db = ScriptDb.getMyDb(); 
    var result = db.query({id: newId}); 
    if (!result.hasNext()) { 
        event.range.offset(0,statusColumn).setValue("NEW STUDENT"); 
    } 
    

Counter-точки существуют, вот только пара.

  • Вам необходимо написать код javascript, а не функции электронных таблиц. Это другой набор навыков.
  • Если вы используете ScriptDb для повышения производительности, вам необходимо включить некоторые возможности обслуживания; по крайней мере, вам нужно загрузить базу данных в первый раз.