Volond Apps
221 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Следующие N флажков
This media is not supported in your browser
VIEW IN TELEGRAM
Выделить далее N флажков
Автоматизация анализа акций с помощью скрипта Google Apps

Источник:



Раньше я вручную вводил финансовые данные по акциям в Excel, а затем создавал диаграммы для визуализации данных. Это заняло много времени и очень подвержено человеческой ошибке.
Недавно я понял, что Google Apps Script может быть спасением и, возможно, сокращает всю ручную работу и, таким образом, автоматизирует процесс заполнения финансовых данных и создания диаграмм.
••••••••••
Обсудить:
This media is not supported in your browser
VIEW IN TELEGRAM
Боремся за + в номере телефона
case (range.getA1Notation() == "G22" && sheet.getName() == 'Шаблон Чека') && value!='':
if (value.match(/=\d/)){

var [,...rest]=value
range.setValue(["'+",...rest].join(''))
break;
}
Как посчитать количество повторений символов в строке?

Источник:



var orderedCount = function (text) {
arr = []
text.split('').forEach( (s,i) => {
if (!arr.includes([s])) {
arr.push([s, 1])
} else {
++arr[i][1]
}
})
return arr;
}

function orderedCount(str) {
const symbols = new Map();
for (const c of str) {
const currCount = symbols.get(c) || 0;
symbols.set(c, currCount + 1);
}
const orderedSymbols = [...symbols.entries()];
return orderedSymbols;
}

Object.entries([...str].reduce((acc, n) => (acc[n] = (acc[n] || 0) + 1, acc), {}))

••••••••••
Обсудить:
Forwarded from DidacticСardsBot
Создает один объект Date из отдельных ячеек даты и времени

Источник:



/**
* Creates a single Date object from separate date and time cells.
* Создает один объект Date из отдельных ячеек даты и времени
* @param {Date} date A Date object from which to extract the date.
* @param {Date} time A Date object from which to extract the time.
* @return {Date} A Date object representing the combined date and time.
*/
function joinDateAndTime_(date, time) {
date = new Date(date);
date.setHours(time.getHours());
date.setMinutes(time.getMinutes());
return date;
}

••••••••••
Обсудить:
Forwarded from IT Библиотека
​​📙JavaScript. Полное руководство. 7-е издание

✍🏻Дэвид Флэнаган (2021)

▪️В настоящей книге рассматривается язык JavaScript и API-интерфейсы JavaScript, реализованные в веб-браузерах и Node. Автор написал ее для читателей, которые имеют определенный опыт программирования и хотят изучить JavaScript, а также для программистов, которые уже используют JavaScript, но стремятся повысить уровень своих знаний и мастерства владения языком.


📁Скачать

@itlibrary
Forwarded from DidacticСardsBot
VtstTemplatingLib

Источник:



Библиотека скриптов Google Apps для создания шаблонов файлов на Google Диске.


Эта библиотека позволяет создавать файлы и папки на Google Диске с помощью переменных. Например, вы можете создать документ Google для письма и поместить строку '{{first_name}}' в качестве заполнителя для имени получателя письма. Эта библиотека сможет программно скопировать этот документ и заменить {{first_name}} фактическим именем, указанным вами.

Текущая версия библиотеки может создавать экземпляры любой иерархии файлов и папок на Google Диске. Переменные (в форме {{имя}}) подставляются в:

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

Как использовать в своем проекте?


Вы можете добавить библиотеку в свой проект скрипта Google Apps, следуя процедуре, описанной здесь. Ключ проекта библиотеки - My93PhalcS_uZ9RkDLiXns_YB2d3K7A2c. Вам следует выбрать последнюю доступную версию.

••••••••••
Обсудить:
Forwarded from DidacticСardsBot
VtstRecordsetLib

Источник:



Библиотека скриптов Google Apps для легкого доступа к содержимому таблиц Google в виде наборов записей.


Обзор


Эта библиотека позволяет получить доступ к содержимому листа (или диапазона) в электронной таблице Google в виде набора записей. Каждая строка на листе представляет собой запись. Каждая запись представлена ​​объектом JavaScript (ключи / значения). Столбцы на листе автоматически сопоставляются с полями объекта.


Как использовать в своем проекте?


Вы можете добавить библиотеку в свой проект скрипта Google Apps, следуя процедуре, описанной здесь . Ключ проекта библиотеки - MbnnZc09j8WUkQ35tumDhj_YB2d3K7A2c. Вам следует выбрать последнюю доступную версию.


Объект Recordset


Recordset.getRecord(index)
Recordset.getAllRecords()
Recordset.setRecord(index, record)
Recordset.setRecords(index, records)
Recordset.updateRecord(index, record)
Recordset.updateRecords(index, records)
Recordset.insertRecord(index, record)
Recordset.insertRecords(index, records)
Recordset.removeRecord(index)
Recordset.removeRecords(index, count)
••••••••••
Обсудить:
Forwarded from DidacticСardsBot
VtstGApi

Источник:



Клиентская библиотека Google API для скрипта Google Apps.


Обзор


Эта библиотека является универсальным клиентом для вызова API Google (и конечных точек Google Cloud) в скрипте Google Apps . Он имеет интерфейс, аналогичный клиентской библиотеке API для JavaScript, с той заметной разницей, что вызовы выполняются синхронно в соответствии с общей моделью библиотек сценариев Google Apps. Он реализует протокол OAuth 2.0 для аутентификации и авторизации.


Как использовать в своем проекте?


Вы можете добавить библиотеку в свой проект скрипта Google Apps, следуя процедуре, описанной здесь . Ключ проекта библиотеки - MVvDIVYrTbZmeRCTovQboz_YB2d3K7A2c. Вам следует выбрать последнюю доступную версию.


Руководство


Вызов API без аутентификации


Вызов API с аутентификацией OAuth 2.0


Пакетные запросы


Примечание об обещаниях

••••••••••
Обсудить:
Forwarded from DidacticСardsBot
клубника

Источник:



Библиотека JavaScript для удобного использования OAuth2 и API Google.


Как пользоваться?


Импортируйте https://cdn.rawgit.com/vtst/strawberry/master/dist/strawberry.min.js на свою HTML-страницу.

••••••••••
Обсудить:
Forwarded from DidacticСardsBot
Стратегии ускорения работы с Google Таблицами

Источник:



Как распознать медленные Google Таблицы
Знайте ограничения размера Google Таблиц
Измерьте размер таблицы Google
Измерьте скорость вычислений Google Sheet
Удалить неиспользуемые ячейки
Преобразуйте формулы в статические значения, где это возможно
Использовать ссылки закрытого диапазона
Удалите энергозависимые функции или используйте с осторожностью
Стратегии Vlookup
Стратегии Index-Match
Стратегии функции запроса
Стратегии формул массива
Стратегии импорта формул
Стратегии работы Google Финансов
Используйте операторы IF для управления вызовами формул
Управляйте дорогими формулами с помощью переключателя управления
Используйте функции Filter, Unique и Array_Constrain для создания небольших вспомогательных таблиц
Избегайте длинных цепочек расчетов
Справочные данные на том же листе
Используйте вспомогательные столбцы
Разделите медленный лист Google на отдельные листы
Экономно используйте условное форматирование
Используйте возможности скрипта приложений
Экономно используйте собственные формулы
Другие советы по устранению неполадок для медленных Google Таблиц
Понимание того, что изменения в облаке распространяются через некоторое время
Знайте, когда пора переходить к базе данных
••••••••••
Обсудить:
Forwarded from DidacticСardsBot
Как я опубликовал PWA на Svelte в Google Play

Источник:



Создание приложения


Первая версия Metalz была написана на react и mobx-state-tree. Потом я захотел выложить приложение в Google Play и переделал все на react-native с использованием шаблона expo. Когда Google под угрозой удаления потребовал 64-битную версию, я переписал все на Svelte. Для сравнения билд на react весил ~300kb, сборка на Svelte ~90kb. Никаких оптимизаций сборки я не проводил, только стандартные шаблоны.

••••••••••
Обсудить:
Forwarded from volond
В чат пришел @vitaliy_lebedev
И задал вопрос
•••••••
Коллеги, здравствуйте!
Подскажите, как сделать чтобы выпадающий список в B1 отображался,
только когда в А1 есть значение.
В других случаях - пустая ячейка
••••••
Представляю решение
Копируем таблицу и изучаем

P.S. Еще один пост про "Выпадающие списки"
Представлен на канале
Google Таблицы

const validateClear=(range,rule)=>{
range.clear().setDataValidation(null);
rule && range.setDataValidation(rule)
}
const getRule=(arr)=>{ return SpreadsheetApp
.newDataValidation()
.requireValueInList(arr)
.build();
}
const paste=({a1Not,sheetName},range)=>range.getSheet().getName()==sheetName&&range.getA1Notation()==a1Not

const config=()=>{
return {
arr:["Знач1","Знач2","Знач3"],
offsetCol:1,
a1Not:'A1',
sheetName:'Лист1'
}
}

function onEdit(e){
var {range,value,source}=e
let list=config()
let exit=!paste(list,range)
if (exit) return
let rule = getRule(list.arr)
let rangeValidation=range.offset(0,list.offsetCol)
let r=(!value)?validateClear(rangeValidation):validateClear(rangeValidation,rule)
//source.toast(`ok ${value}`) // Контроль
}
Forwarded from CONTRIBUTOR.PW (Alexander Ivanov)
Теперь сниппеты можно копировать себе через https://scrviz.web.app
Google Apps PASTEBIN

Зарегистрироваться на
https://pastiebin.com/account/register
Для получения:
api_user_name
api_user_password
Получить api_dev_key https://pastiebin.com/account/settings
Получить api_user_key выполнив getPastebinUserKey
Заполнить getPasteBinConfig

/**
Google Apps PASTEBIN
Зарегистрироваться на https://pastiebin.com/account/register
Для получения:
api_user_name
api_user_password
Получить api_dev_key https://pastiebin.com/account/settings
Получить api_user_key выполнив getPastebinUserKey
Заполнить getPasteBinConfig

*/
function getPasteBinConfig() {
var api_dev_key='' // Ключ разработчика
var api_url='https://pastebin.com/api/api_post.php'
var api_url_login='https://pastebin.com/api/api_login.php'
var api_paste_name='volond'// Кем обубликовано
var api_user_name='' // Логин Пастебин
var api_user_password='' // Пароль Пастебин
var api_user_key=''
return {api_dev_key,api_url,api_url_login,api_paste_name,api_user_password,api_user_name, api_user_key}

}

function postPastebinPost() {

var {api_dev_key,api_url,api_paste_name,api_user_password,api_user_name,api_user_key}=getPasteBinConfig();
var contents = 'Hello World \n next line of content \n more text';
var payload = {
api_dev_key: api_dev_key, // https://pastebin.com/api#1
api_option: 'paste',
api_paste_name: api_paste_name,
api_paste_code: contents,
api_paste_private: '0', // public paste
api_user_name: api_user_name, // name of your Pastebin account
api_user_password: api_user_password, // password to your Pastebin account
api_user_key: api_user_key, // https://pastebin.com/api/api_user_key.html
};
var options = {
method : 'POST',
payload: payload
};
var url = 'https://pastebin.com/api/api_post.php';
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
}

function getPastebinUserKey() {

var {api_dev_key,api_url_login, api_user_name,api_user_password}=getPasteBinConfig();

var payload = {
api_dev_key: api_dev_key, // https://pastebin.com/api#1
api_user_name: api_user_name, // name of your Pastebin account
api_user_password: api_user_password, // password to your Pastebin account
};
var options = {
method : 'POST',
payload: payload
};

var response = UrlFetchApp.fetch(api_url_login, options);
Logger.log(response.getContentText());
}
••••••••••
Обсудить:
Работаем с Инициалами в Фамилиях
/**
* Работаем с Инициалами в Фамилиях
*/
var PIB=(key,row)=>(row)=>{
row[key]=row[key].split(" ").reduce((acc,el,i)=>{
var [a,...rest]=el
acc+=!i?[a.toUpperCase(),...rest].join(''):' '+a.toUpperCase()+'.'
return acc
},'')
return row
}

var PIBs=(key,range)=>{
const cPIB=PIB(key)
return range.map(cPIB)
}
console.log(PIBs(0,
[['иванов Иван иванович'],
['Петров петр Петрович']]
))
//Інформація [ [ 'Иванов И. И.' ], [ 'Петров П. П.' ] ]
••••••••••
Обсудить: