Volond Apps
221 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
Самый простой способ получить файл ID из URL на Google Apps Script
Источник
function getIdFromUrl(url) {
return url.match(/[-\w]{25,}/);
}


Но не все так просто с ссылками именно на файлы на диске
Для Python:

Для фиксированной длины google drive IDs вы можете использовать это:

regex = "([\w-]){33}|([\w-]){19}"
match = re.search(regex,url)
Google drive использует 33 символа для обычных дисков и 19 символов для командных дисков

Другой подход без использования фиксированной длины, но вместо этого предшествующих паттернов:

regex = "(?<=/folders/)([\w-]+)|(?<=%2Ffolders%2F)([\w-]+)|(?<=/file/d/)([\w-]+)|(?<=%2Ffile%2Fd%2F)([\w-]+)|(?<=id=)([\w-]+)|(?<=id%3D)([\w-]+)"

match = re.search(regex,url)
Forwarded from DidacticСardsBot
Как проверить, редактирует ли текущее сообщение ответ или новый ответ

Источник:



В событии отправки формы Google Form нет поля, которое могло бы помочь узнать, является ли ответ новым или измененным ответом. Как уже сказал Сэнди в комментариях к вопросам, классы и методы Form Servicer, а также значения ответов не включают в себя что-то, что могло бы помочь в этом.


function onFormSubmit(e){
var response = e.range;
Logger.log(response.getRow());
}


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


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


/*
*
* Global Variables
*
*/

/*
* Sheet name used as destination of the form responses
*/
var sheetName = 'Form Responses';

/*
* Name of the column to be used to hold the response revision counter
* It should match exactly the header of the related column,
* otherwise it will do nothing.
*/
var revisionsColumn = 'Rev';

/*
* Responses starting row
*/
var startRow = 2;

function setRevisionCounts(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var revisionsIndex = headers[0].indexOf(revisionsColumn);
var data = sheet.getDataRange().getValues();
var response = e.range;
var rowIndex = response.getRow()-1;
var rev = data[rowIndex][revisionsIndex]+1;
sheet.getRange(rowIndex+1, revisionsIndex+1).setValue(rev);
}

••••••••••
Обсудить:
image_2021-09-08_10-14-09.png
21.8 KB
Меня постигла печаль...
Что ж будем бороться...
Forwarded from Volond Apps (volond)
/*
Использование функций генератора JavaScript для диапазонов
Создание генератора диапазонов,подобного диапазонам Python или Ruby
*/
const range = (end, start = 0, step = 1) => {
function* generateRange() {
let x = start - step;
while(x < end - step) yield x += step;
}
return {
[Symbol.iterator]: generateRange
};
}

console.log([...range(7)]); // [0, 1, 2, 3, 4, 5, 6]
for (let i of range(8, 2, 2)) console.log(i); // Logs: 2, 4, 6
#JS #function #array
Forwarded from Artem
Forwarded from Google Таблицы
Небольшая статья про api, cookie, авторизацию на минималках

Когда вы вводите свой логин и пароль на сайте через браузер – вы получаете cookie, cookie помогают при перезагрузке страницы или при входе через некоторое время не авторизовываться заново, а использовать уже созданную сессию.

В материале от Романа Игнатова простой пример того, как на сайте без API через GAS-скрипты можно получить cookie и дальше использовать их открывая страницы, которые доступны только после авторизации пользователям.

Кажется, что это первый материал на эту тему на русском 🔥
ignatov-script.blogspot.com/2021/09/api.html

P. S. "Авторизовываться", с помощью логина и пароля в этом примере не требуется, но если для вашего сайта это необходимо – формируйте post-запрос на страницу авторизации, в payload передавайте логин и пароль и забирайте cookie уже из headers этого запроса
Вопрос
Добрый день. В ячейке стоит следующая формула =23+45+76+87+98. Как в другой ячейке вывести количество чисел? 5. Пробовал LEN. Работает только с текстами, к сожалению. =1+LEN(C15)-LEN(SUBSTITUTE(C15;"+";"")) - не работает
Ответ
=COUNTA(split(FORMULATEXT(B49);"+-*/";1;true))
Forwarded from DidacticСardsBot
Авторизация в Google Apps Script

Источник:



В 99% случаев авторизация в скрипте Google Apps чрезвычайно проста. Когда пользователь выполняет свой сценарий, он запускает его как себя с соответствующими областями авторизации. Исключения составляют:


Устанавливаемые триггеры, запускаемые от имени их автора
Веб-приложения, которые также могут запускаться от имени их автора в зависимости от настроек развертывания.
Однако что, если вам нужно предоставить своему приложению больше прав, чем те, которые будут иметь ваши предполагаемые пользователи?
••••••••••
Обсудить:
Forwarded from Michael Smirnov
QUERY с группировкой:
=QUERY({'Лист1'!A2:G}; "SELECT Col3, Col4, Col5, SUM(Col6), Col7 WHERE Col1 IS NOT NULL GROUP BY Col3, Col4, Col5, Col7 LABEL SUM(Col6) ''"; 1)

https://developers.google.com/chart/interactive/docs/querylanguage
48 полноценных бесплатных книг для программистов (happy developer's day)
Источник
Привет, Хабр! Немного запоздало (ко дню программиста) делюсь подборкой бесплатных книг по программированию (ну и в целом ресурсом с ними). Все они полезные, уровень скорее профессиональный, хотя и для развития от базового тоже подойдет, но, к сожалению, на английском. Среди тем книг:
.NET
Алгоритмы
Android
iOS
Angular
C
C++
C#
JS
Linux
Python
Forwarded from Максим Стоянов
Коллеги всем привет!

Давно меня беспокоило отсутствие URL и URLSearchParams
Как-то давно я делал себе на быструю руку парсер url.

Теперь же решил сделать нормальную либу.
Прошу посетить не равнодушным 🙂

Id
1QCIhfEvmPkdVnri2LurMTLDAxvU4p2xAlZvmBcTKeDgfNJtnXyXezlsq

Код:
https://script.google.com/home/projects/1QCIhfEvmPkdVnri2LurMTLDAxvU4p2xAlZvmBcTKeDgfNJtnXyXezlsq/edit

Мои тесты:
https://script.google.com/home/projects/1Q7qUFJrWAjsCKaxd1YP9xqtx-q_fAPWyMcO0BuqkenSV7ILug7tnuvxr/edit
Forwarded from DidacticСardsBot
Введение в GraphQL: что это за язык и как использовать его под Android

Источник:



клиенту при работе с GraphQL API совершенно не важно, откуда поступают данные, которые он запрашивает. Он просто делает запрос в нужном ему объеме, а сервер GraphQL возвращает результат. Поэтому можно представить, что схема — это контракт между API и клиентом, так как, прежде чем клиент выполнит какой-либо запрос, этот запрос валидируется в соответствии со схемой данного API.

••••••••••
Обсудить: