Volond Apps
221 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
Volond Apps pinned «Следующая статья цикла: "Банк знаний по ботам и не только... " 🛠🤖 В этой статье.... 1.Telegram Полезные боты для разработки , Группы и каналы Примеры Telegram Bot и Google Form Telegram и GMail-боты Обычное подменю клавиатуры в Telegram Bot Как ограничить…»
Forwarded from Рестарт
Miro - это платформа интерактивных досок
для совместной работы

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

Будьте креативным. Будьте продуктивны. Откуда угодно.

В бесплатном тарифе только пять досок и отсутствие приятных плюшек вроде видеочата, секундомера и т.д.

GIT
Класс для управления Properties
#snippet #GAS
/**
* Класс для управления Properties
* DocumentProperties or ScriptProperties or UserProperties
*
* Creates an instance of Props.
* @param {string} prop
* @memberof Props
* @constructor
* https://developers.google.com/apps-script/reference/properties
* @example
* const testProps=()=>{
* const scrProp=new Props("ScriptProperties");
* scrProp.set("v","1")
* concole.log(scrProp.get("v"))
* }
* @return {} Class Properties
*/
class Props {


constructor(prop) {
this[prop] = PropertiesService['get' + prop]();
this.type = prop
return this;
}

get(name) {
return this[this.type].getProperty(name);
}

getProperties(name) {
return this[this.type].getProperties();
}
type(prop) {
return this.type;
}
set(name, value) {
return this[this.type].setProperty(name, value);
}

forget(name) {
return this[this.type].deleteProperty(name);
}
forgets(names)
Таймер в боте на скриптах
Таймер в Боте на скриптах
function finalCountdown() {
var token = '<token>';;
var chatID = 'chatID';
var url = 'https://api.telegram.org/bot' + token +
'/sendMessage?chat_id=' + chatID + '&text=It\'s the final countdown!';
var response = UrlFetchApp.fetch(url);
response = JSON.parse(response.getContentText());
var msgID = response.result.message_id;
Utilities.sleep(1000);
var baseUrl = 'https://api.telegram.org/bot' + token +
'/editMessageText?chat_id=' + chatID + '&message_id=' + msgID + '&text=';
var w = { '0': "0️⃣", '1': "1️⃣", '2': "2️⃣", '3': "3️⃣", '4': "4️⃣", '5': "5️⃣", '6': "6️⃣", '7': "7️⃣", '8': "8️⃣", '9': "9️⃣", ":": "▪️" }

var url;
for (var i = 0; i < 15; ++i) {

var date = new Date();
var timestamp = date.getTime();
var timezone = Session.getScriptTimeZone()
var times = Utilities.formatDate(date, timezone, "HH:mm:ss");
url = baseUrl + [...times.toString()].map(e => w[e]).join();
UrlFetchApp.fetch(url);
Utilities.sleep(1000);
}
url = baseUrl + '💣Boom!';
UrlFetchApp.fetch(url);
}
ARRAYFORMULA не поддерживает GOOGLETRANSLATE :)
‼️Но выход есть‼️
=ARRAYFORMULA(TRIM(TRANSPOSE(SPLIT(
GOOGLETRANSLATE(TEXTJOIN(". ", 1, B20:B24), "en", "de"), "."))))
Forwarded from volond
Генерим alphabet формулой
=arrayformula(char(SEQUENCE(26;1;65)))
Forwarded from volond
Используя функцию из этого поста
https://t.me/google_sheets/530
И добавив бонус
/** Декартово произведение двух диапазонов
* https://t.me/google_sheets – наш канал про Таблицы Google и скрипты :)
* @param Первый диапазон
* @param Второй диапазон
* @return
* @customfunction
*/
function RENE(range1, range2){
return [].concat(...range1.map(y => [].concat(...[range2.map(h => [y[0], h[0]])]))).filter(t => t[0]);
}
function alphabet(){
return [...Array(26)].map((_, y) => String.fromCharCode(y + 65)).join('')
}

function alphabetArr(){ return [...alphabet()]}
function alphabetRENEJOIN(range){ return range.map(e=>e.join(''))}

Комбинируя в формуле
={alphabetArr();alphabetRENEJOIN(RENE(alphabetArr();alphabetArr()));alphabetRENEJOIN(RENE(alphabetRENEJOIN(RENE(alphabetArr();alphabetArr()));alphabetArr()))}

Получаем все сочетания от A до ZZZ
/*
Использование функций генератора 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
Изучаю замену условным конструкциям в JavaScript

В этой статье рассказывается о том как писать условные конструкции лучше,
чем вы к этому скорее всего привыкли и наглядно, на примерах показывается,
как это делать в сравнении с обычными методами.
читать ...
Channel photo updated
Первая статья цикла
Object.assign VS Spread
"Когда вам нужно использовать Object.assign"
Я хотел бы добавить этот простой пример, когда вам нужно использовать Object.assign.

class SomeClass {
constructor() {
this.someValue = 'some value';
}

someMethod() {
console.log('some action');
}
}


var e = () => {


const objectAssign = Object.assign(new SomeClass(), {});
objectAssign.someValue; // ok
objectAssign.someMethod(); // ok

const spread = {...new SomeClass() };
console.log(spread.someValue); // ok
console.log(spread.someMethod()); // Error:spread.someMethod is not a function! there is no methods of SomeClass!


}
Вторая статья цикла
Object.assign VS Spread
Когда вам нужно использовать Object.assign. тут
А также научимся получать имя объекта из самого объекта
Превращать строковое имя объекта в сам объект
Скрывать свойства и методы объекта из перечисляемых свойств
Объединять объекты в один

var USER = {
['b']: 'b',
['getName']: () =>"USER",
}
var MSG = {
['a']: 'a',
['getName']: () => "MSG",
}

var f=()=>{
//Получаем из строки имен обьектов разделенных запятыми эти обьекты как объекты JS
var string = 'USER,MSG'
var objs = string.split(",").map(el => eval(el)) //
// Скрываем в этих обьектах метод getName
const enumerableProperty = (property, obj) => obj => Object.defineProperty(obj, property, { enumerable: false });
const enumerableGetName = enumerableProperty('getName')
objs.forEach(enumerableGetName)
objs.forEach(el => console.log(Object.keys(el)));
//Обьеденяем в один обьект
var asassignObj=objs.reduce((total,el)=>{
total=Object.assign({},total,el);
return total
},{});
console.log(asassignObj)
}
Экранирование специальных символов внутри регулярного выражения для javascript?

f
unction escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}

#JS #snippet #RegExp
={"#";SEQUENCE(COUNTA(C2:C);1;2)}
подробно