Size: a a a

Чат | Google Таблицы и скрипты

2020 March 22

A

Admin in Чат | Google Таблицы и скрипты
Nikita Kuznetsov
пробую 👆
Получается? Очистить диапазон от данных надо, arrayFormula сама проставит до конца

Также можно другой и одной формулой сделать для СУММ по строкам 👇
https://t.me/google_spreadsheets_chat/82397
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Помню, что arrayformula работает, если ниже в столбце нет никаких значений. У вас подсмотрел)
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Кстати, кому интересно, табличку заполняю отправкой запроса из сервиса Автопилот в самописный гугл-скрипт:
//Внутренние функции
function log(t)
{
 Logger.log(t);
}

//Принимаем запрос из Автопилота
function doGet(e)
{
 var SpreadsheetID =  e.parameter.SpreadsheetID;
 var SheetName =  e.parameter.SheetName;
 var Date = e.parameter.Date;
 var SubsId = e.parameter.SubsId;
 var FullName = e.parameter.FullName;
 var Points = e.parameter.Points;
 var Report = e.parameter.Report;
 var Regex = e.parameter.Regex;

//Открываем таблицу с переданным ID и лист с переданным названием
 var Spreadsheet = SpreadsheetApp.openById(SpreadsheetID);
 var Sheet = Spreadsheet.setActiveSheet(Spreadsheet.getSheetByName(SheetName));
 
 var Row = Sheet.getLastRow()+1;
 Sheet.getRange(Row,1).setValue(Date);
 Sheet.getRange(Row,2).setValue(SubsId);
 Sheet.getRange(Row,3).setValue(FullName);
 var f = 'HYPERLINK("vk.com/id'+SubsId+'";$C'+Row+')';
 log('f:' +f);
 Sheet.getRange(Row,4).setFormula(f);
 Sheet.getRange(Row,5).setValue(Points);
 Sheet.getRange(Row,6).setValue(Report);
 //var f2 = 'REGEXEXTRACT($F'+Row+';'+Regex+')';
 Sheet.getRange(Row,7).setFormula(f2);
   
 SpreadsheetApp.flush();
 return ContentService.createTextOutput("ok");
 
}
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Просьба не кидать тапочками, т.к. я не программист, и из всего smm-коммьюнити Автопилота только я один разбирался с задачей.
источник

VP

Vitaliy P. in Чат | Google Таблицы и скрипты
Что мешает вам сразу заполнять результаты скриптом?
источник

VP

Vitaliy P. in Чат | Google Таблицы и скрипты
вы можете в скрипте сразу собирать массив данных строки и вставлять текст в десяток колонок одним setValue
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Я чувствую, что мне сегодня помогут докопаться до корня проблемы. ;)))

Рассказываю. Тест построен на боте Senler, там его сделал мой заказчик. Бот иногда двоит и может поставить балл за одно и то же задание дважды, трижды и т.п.

Чтобы как-то отловить задвоения баллов по вине бота, я самим ботом записываю лог заданий вида Qномер_вопроса,балл,
Этот лог вытаскиваю в гугл-таблицу и смотрю, где есть задвоения баллов. Редактирую клеточку "Лог" вручную, убирая повторное выполнение задания.

Вот пример лога с задвоениями. Значения, выделенные жирным, я выкидываю, т.к. учитывается только первое выполнение. Пока не научился выкидывать их регуляркой.
0Q01,50,Q01,50,Q01,50,Q02,10,

Потом из суммы баллов и VK ID сформирую гет-запрос, вставлю его в Автопилот и пропишу всем правильное значение баллов.
источник

VP

Vitaliy P. in Чат | Google Таблицы и скрипты
Nikita Kuznetsov
Я чувствую, что мне сегодня помогут докопаться до корня проблемы. ;)))

Рассказываю. Тест построен на боте Senler, там его сделал мой заказчик. Бот иногда двоит и может поставить балл за одно и то же задание дважды, трижды и т.п.

Чтобы как-то отловить задвоения баллов по вине бота, я самим ботом записываю лог заданий вида Qномер_вопроса,балл,
Этот лог вытаскиваю в гугл-таблицу и смотрю, где есть задвоения баллов. Редактирую клеточку "Лог" вручную, убирая повторное выполнение задания.

Вот пример лога с задвоениями. Значения, выделенные жирным, я выкидываю, т.к. учитывается только первое выполнение. Пока не научился выкидывать их регуляркой.
0Q01,50,Q01,50,Q01,50,Q02,10,

Потом из суммы баллов и VK ID сформирую гет-запрос, вставлю его в Автопилот и пропишу всем правильное значение баллов.
источник

VP

Vitaliy P. in Чат | Google Таблицы и скрипты
var s = "0Q01,0,Q02,20,Q02,20,Q03,30,Q03,30,Q04,10,Q04,10,Q05,50,Q06,50,Q07,50,Q08,50,Q09,-10,Q10,10,Q11,50,Q12,-50,Q13,50,Q14,-40,Q15,100"

s.replace(/(Q\d\d,\d+,)(\1+)/gi, "$1").split(/[0,]Q\d\d,/)
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
За split и replace спасибо! Вы мне дали материал для изучения на неделю вперёд!
источник

VP

Vitaliy P. in Чат | Google Таблицы и скрипты
Средствами JS несложно и убрать дубликаты регуляркой, и регуляркой же превратить в массив строк с баллами
источник

A

Admin in Чат | Google Таблицы и скрипты
👍
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Может, когда-нибудь я до этого дорасту. Особенно если научусь программировать. Пока собираю простецкие скрипты на основе чужих шаблонов.
источник

VP

Vitaliy P. in Чат | Google Таблицы и скрипты
здесь ничего сложного нет, чистое упражнение на регулярки)
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Надеюсь, к следующему запуску такого теста я смогу написать регулярку для удаления дубликатов.
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Vitaliy P.
здесь ничего сложного нет, чистое упражнение на регулярки)
Спасибо за помощь и за мотивацию!
источник

C

Combot in Чат | Google Таблицы и скрипты
Донаты

Друзья, помощь в чате безвозмездная, но если вы захотите отблагодарить сообщество — не стесняйтесь.

Карта Тинькофф:
4377 7237 4010 3902
Яндекс Деньги:
https://money.yandex.ru/to/41001227796511
PayPal:
https://paypal.me/googlesheets

Благодарим за поддержку:
(Таблица Last-15)
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Admin
Одной формулой на всю колонку, без растягивании на каждую строку + числовые значения

=ArrayFormula(ЗНАЧЕН(REGEXEXTRACT(F8:F;"^0Q01,(.+),Q02,(.+),Q03,(.+),Q04,(.+),Q05,(.+),Q06,(.+),Q07,(.+),Q08,(.+),Q09,(.+),Q10,(.+),Q11,(.+),Q12,(.+),Q13,(.+),Q14,(.+),Q15,(.+)$")))
Товарищ админ, вы посоветовали мне использовать формулу с функцией arrayformula.
Я заметил, что когда скрипт записывает в таблицу новую строку, происходит пересчёт формул.
Вопрос: этот пересчёт может повлиять на запись новых строк скриптом, если число запросов в скрипт будет достаточно большое (1 раз в секунду)?
Мне не хочется, чтобы из-за перерасчёта формул таблица "зависала" и пропускала запись новых значений.
P.S. С квотированием пытался разобраться, но мало что понял.
источник

РИ

Роман Игнатов... in Чат | Google Таблицы и скрипты
Nikita Kuznetsov
Товарищ админ, вы посоветовали мне использовать формулу с функцией arrayformula.
Я заметил, что когда скрипт записывает в таблицу новую строку, происходит пересчёт формул.
Вопрос: этот пересчёт может повлиять на запись новых строк скриптом, если число запросов в скрипт будет достаточно большое (1 раз в секунду)?
Мне не хочется, чтобы из-за перерасчёта формул таблица "зависала" и пропускала запись новых значений.
P.S. С квотированием пытался разобраться, но мало что понял.
В вашем коде если get будет вызываться каждую секунду, даже без arrayformula, возможны пропуски.
источник

NK

Nikita Kuznetsov in Чат | Google Таблицы и скрипты
Пока думаю над вопросом: будет ли больше пропусков, если использовать arrayformula
источник