Volond Apps
221 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
Как создать визуальный индикатор состояния в электронной таблице Google Таблиц

При переходе в «режим проекта» всегда приятно иметь визуальное представление текущего статуса. Независимо от того, является ли этот статус отдельной задачей или всем проектом, он помогает быстро понять, как далеко мы продвинулись и сколько еще осталось пройти.
#sheet
Балуемся с датами

Вариант
1 ‼️
var [d,m,y]='13/12/2020'.split("/")
console.log(new Date(y,m-1,d))
Вариант 2
var a='13/12/2020'.split("/")
a[1]-=1
console.log(new Date(a.reverse()))
Вариант 3
var regDataTime = /(?<d>\d{1,2}/(?<mont>\d{1,2})/(?<y>\d{1,4});
let { y, mont, d} = '13/12/2020'.match(regDataTime).groups;
var nextData =new Date(y, mont - 1, d)
Вариант 4 ‼️
const dateStr = '13/12/2020'; 
const normalDate = new Date(dateStr.split('/').reverse();
console.log(normalDate.toLocaleDateString('ru')); 13.12.2020 console.log(normalDate.toLocaleDateString('eu')); 2020/12/13
#gas
Мгновенное голосование во втором туре

В
этом проекте IRV - это метод выбора одного победителя. Избиратели ранжируют кандидатов в форме Google, и администратор запускает скрипт со скриптом Google Apps, чтобы определить победителя.


instant-runoff
#googlesheet #googleform
Этот репозиторий содержит примеры многих популярных алгоритмов и структур данных на основе JavaScript.

Каждый алгоритм и структура данных имеют свой собственный README с соответствующими пояснениями и ссылками для дальнейшего чтения (включая ссылки на видео на YouTube).
Ресурсы Google Workspace Developer GDE 🛠
Супергерои известны тем, что носят плащи, сражаются со злодеями и стремятся спасти мир от зла. Также есть супергерои, которые спокойно предпочитают использовать свои сверхспособности, чтобы объяснять технологии новым пользователям, поддерживать форумы сообщества, писать сообщения в блогах, выступать на мероприятиях, размещать сериалы видео, создавать демонстрации, делиться образцами кода и т. И все во имя того, чтобы помочь другим разработчикам стать более успешными за счет приобретения новых навыков, создания более качественных приложений и, в конечном итоге, повышения их карьеры. В Google мы называем последнюю категорию супергероев экспертами-разработчиками Google или для краткости «GDE».

Программа Google Developer Experts - это глобальная сеть высококвалифицированных технологических экспертов, идейных лидеров и влиятельных лиц, которые активно поддерживают сообщества разработчиков по всему миру, делясь своими знаниями и энтузиазмом по широкому кругу тематических областей от Android до Angular до Google Assistant и Google Cloud. - и, конечно же, Google Workspace. Помня о том, что все GDE - добровольцы, которые не только свободно уделяют время поддержке других, но также помогают улучшать наши продукты, предлагая свои проницательные отзывы, тщательно тестируя новые функции, часто перед их выпуском, при этом помогая расширять как варианты использования, так и аудиторию. способ.


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

Сообщество Google Workspace GDE также содержит несколько действительно полезных ресурсов, которые стоит посетить:

Форумы сообщества
Группы Google - groups.google.com/g/google-apps-script-community
Stack Overflow - stackoverflow.com/questions/tagged/google-apps-script
Slack- google-apps-script.slack.com
Списки
Twitter - twitter.com/i/lists/1235144368593367043
Medium Google GDE Blogs - medium.com/google-developer-experts
https://developers.google.com/community/experts/directory
Apps Script Pulse (Новости) - pulse.appsscript.info
Digital Inspiration (дополнения и инструкции) - digitalinspiration.com
Основы Google Таблиц ( инструкции по автоматизации) - benlcollins.com
Desktop Liberation (руководства по скриптам приложений) - ramblings.mcpher.com
Teacher Tech (ресурсы для EDU) - alicekeeler.com
Totally Unscripted (выставка сообщества) - sites.google.com/corp/view/totallyunscripted/home
GDE Видео
Totally Unscripted
- www.youtube.com/c/TotallyUnscriptedShow
Синхронизатор значений в ячейках расположенных на указанных листах но по одному адресу! 🔛

function onEdit(e){
var A1Not='A2'
var sheets=['RSS','RSSs']
var ss=SpreadsheetApp.getActiveSpreadsheet()
var eNameSheet=e.range.getSheet().getName()
if (e.range.getA1Notation()==A1Not&&sheets.indexOf(eNameSheet)!=-1){
var value=e.value
console.log(e.value)
sheets.map(sh=>ss.getSheetByName(sh).getRange(A1Not).setValue(value))
}
}

P.S. Вписать свой адрес и Имена листов
#JS #onEdit
Как удалить проверки данных?
sh.getRange("a4:e").clearDataValidations()
sh.getRange("a4:e").clearContent();
Рекурсия в скрипте Google Apps

🎱Рекурсия очень полезна и, вероятно, первая трудная для понимания информация для начинающих программистов. Это полезно, когда вы хотите снова и снова вызывать одну и ту же функцию, но с разными значениями в качестве параметра.

Хорошо известный пример - вычисление факториала. Факториал 5 содержит факториал 4 и содержит факториал 3 и т. Д.

...
5! = 5 * 4! = 5 * 4 * 3! = 5 * 4 * 3 * 1 = 120
4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 2 * 1 = 24
...

Таким образом, вы можете написать функцию как

function factorial (n) {
если (n == 0 || n == 1) return 1;
если (f [n]> 0) return f [n];
return f [n] = n * факториал (n-1);
}

Если вы запустите factorial (5), он вызовет функцию 5 раз. Каждый новый звонок будет вставлен в другой.

Во время рекурсии в скрипте Google Apps есть небольшое ограничение . Вы можете вызвать только ❗️1000❗️ унаследованных функций.
Если ваш скрипт вызывается несколько раз, вы получите ошибку:
Превышена максимальная глубина стека.
Удалим дубликаты из массива

Способ 1
var arrA3 =[1, 4, 3, 2,8,9,10,4,8,2]
let uniq=[...new Set(arrA3)]
console.log(uniq)
Способ 2
сonst values =[1, 'a', 3, 2,8,9,10,'a',8,2];
function duplicates(arr) {
return Object.values(arr).reduce((acc, val) => {
acc.count[val] = (acc.count[val] || 0) + 1;
if (acc.count[val] > 1) acc.duplicates[val] = acc.count[val];
return acc;
}, { count: {}, duplicates: {} }).duplicates;
}

var dup=duplicates(values);//return { '2': 2, '8': 2, a: 2 }
var res=Object.keys(dup).reduce((t,e)=>{
var indx= t.indexOf(e)

t.splice(indx, 1)
return t

},values)
console.log(res)//[1, 3, 2, 8, 9, 10, 'a']

⁉️Способ 2 в отличии от Способа 1
позволяет что то делать перед удалением
Скопируйть файл ( в том числе и файл Google Apps Script) с помощью... Google Apps script в Расшаренный ДИСК Google Drave
//Мой код выглядит примерно так:
function copyFileToSharedDrive(){

var sharedDriveId = "sharedriveidcomeshere";
var sharedDrive = DriveApp.getFolderById(sharedDriveId);
var appsScriptFileId = "appsscriptfileidcomeshere";
DriveApp.getFileById(appsScriptFileId).makeCopy(sharedDrive).setName("This is a copy of the original apps script file");
}

Результатом, однако, является копия файла сценария приложения, но он находится в моей корневой папке на моем Google диске, а не на общем диске.

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

Скопируйте файл Google Apps Script. В это время файл создается в корневой папке.
Переместите файл GAS в определенную папку на общем диске, используя метод Files.patch из Drive API.
Пример сценария:
function copyFileToSharedDrive(){
var destinationFolderId = "###"; // Please set the destination folder ID of shared Drive.
var appsScriptFileId = "###"; // Please set the GAS script ID.

var file = DriveApp.getFileById(appsScriptFileId)
var copiedFile = file.makeCopy().setName(file.getName()).getId();
Drive.Files.patch(
{title: "This is a copy of the original apps script file"},
copiedFile,
{removeParents: "root", addParents: destinationFolderId, supportsAllDrives: true}
);
}
Примечание:
О
supportsAllDrives , официальный документ гласит следующее.

Устарело - поддерживает ли запрашивающее приложение как мои диски, так и общие диски. Этот параметр будет действовать только до 1 июня 2020 года. После этого предполагается, что все приложения поддерживают общие диски.
Таким образом, с 1 июня 2020 года, даже если supportsAllDrives не используется, общий диск может быть использован.
Расстояния Левенштейна(Степень похожести слов)
Расстояние Левенштейна (редакционное расстояние, дистанция редактирования) — метрика, измеряющая разность между двумя последовательностями символов. Она определяется как минимальное количество односимвольных операций (а именно вставки, удаления, замены), необходимых для превращения одной последовательности символов в другую. В общем случае, операциям, используемым в этом преобразовании, можно назначить разные цены. Широко используется в теории информации и компьютерной лингвистике.
Решения
Ускорение расчета расстояния Левенштейна

Автомат Левенштейна

Сбалансированное двоичное дерево поиска (BST) (поиск, удаление, InOrder, PreOrder, PostOrder, DepthFirst, BreadthFirst, BalanceTree)
image_2020-12-22_14-35-11.png
42.1 KB
Code Generator for HTTP Requests
.
Быстрый конструктор запросов для UrlFetchApp с генерацией минимального кода функции
Как использовать функцию SUMPRODUCT в Google Таблицах

Настоящая роль функции СУММПРОИЗВ (функция массива) заключается в вычислении суммы произведений значений в 2 (или более) массивах одинакового размера.

В последнее время я понял, что СУММЕСЛИМН равно или более мощно, чем СУММЕСЛИ или СУММЕСЛИМН . ....
Забираем данные по API Новой почты из Гугл таблиц.
Забираем данные по API Новой почты из Гугл таблиц
Ky - это крошечный и элегантный HTTP-клиент, основанный на Fetch API .

Ky нацелен на современные браузеры и Deno . Для старых браузеров вам нужно будет транспилировать и использовать fetchполифил . Для Node.js проверьте Got . Для изоморфных потребностей (например, SSR) проверьте .ky-universal
.
Вытягиваем инфу из Листов быстро
или заставляем INDIRECT работать с массивом
🦾
Описание
Code
PasteBin
Table
table
OFFSET как побороть ошибку циклической ссылки
=sum(OFFSET(C3;;;MATCH(1,Е+308;OFFSET(C3;;;ROWS(C:C)-ROW(C3)))))
#formula