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

Способ 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
Используйте Google Таблицы в качестве инструмента отчетности вашего приложения
Из этой лаборатории вы узнаете, как использовать Google Таблицы в качестве настраиваемого инструмента отчетности для ваших пользователей. Вы измените образец приложения для отслеживания заказов для экспорта в электронную таблицу и создания визуализаций с помощью API Google Sheets. Пример приложения построен с использованием Node.js и веб-инфраструктуры Express, но те же основные принципы применимы к любой архитектуре.
Пакетный менеджер
Видео
Описание
Forwarded from volond
=Arrayformula(split(textjoin("";true;transpose({SEQUENCE(1;$A$1;2);split(rept("_"&$A$2&"#,";$A$1);",")}));"#"))
Forwarded from volond
Возможно кому-то понадобиться список периодов дат на каждый год

=arrayformula(transpose(TEXT(DATEVALUE("1."&SEQUENCE(1;12;1)&"."&year(today()));"dd.mm.yyyy"))&"-"&{TEXT(transpose(DATEVALUE("1."&SEQUENCE(1;11;2)&"."&year(today()))-1);"dd.mm.yyyy");TEXT(DATE(year(today());12;31);"dd.mm.yyyy")})
#formula
И период дат для текущего месяца
=arrayformula(TEXT(DATEVALUE(SEQUENCE(1;index(transpose({arrayformula(day(transpose(DATEVALUE("1."&SEQUENCE(1;11;2)&"."&year(today()))-1)));day(DATE(year(today());12;31))});1;MONTH(today()));1)&"."&MONTH(today())&"."&year(today()));"dd.mm.yyyy"))
#formula #date
Автоматическое создание уникальных идентификаторов в Google Таблицах
#JS
// UID UNIQUENESS
// ID_LENGTH = 3: 226,920 posible values
// ID_LENGTH = 4: 13,388,280 posible values
// ID_LENGTH = 5: 776,520,240 posible values
// ID_LENGTH = 6: 44,261,653,680 posible values


var ID_LENGTH = 5;

// Thanks to Tom Spencer for this function
// Tom's website/blog is at fiznool.com
function generateUID () {
var ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var rtn = '';
for (var i = 0; i < ID_LENGTH; i++) {
rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));
}
return rtn;
}