Volond Apps
221 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
function PIB(text) {
if(!Array.isArray(text)){text=[[text]]}
//var text=[['А.В. Петров.'],['С.А. Васильев, И. Г. Безфамильный']]
text=text.filter(e=>!!e[0])
var ws=text.map(q=>q[0].split(","))
var f=(m)=>m.split(".").map(s=>s.trim()).filter(el=>!!el)
var z=(z)=>{
var [a,b,c]=f(z)
return [c,[a+".",b+"."].join(' ')].join(" ")
}
var res=ws.map(r=>[r.map(u=>z(u)).join(",").trim()])
console.log(res)
return res

}
//Пример удаления задвоеных пробелов и пробелов в начале и конце в JavaScript:
Text=' иванов сергей иванович '
Text = Text.replace(/ {1,}/g," ").trim();

//Пример удаления разрывов строк в JavaScript:
Text = Text.replace(/(\r\n|\n|\r)/gm," ");
console.log(Text);

//Text='иванов сергей иванович'
console.log(Text.split(" ").map(word=>{
var [ferst,...rest]=[...word]
return [ferst.toUpperCase(),rest.join('').toLowerCase()].join('')
}).join(' '))
//return Иванов Сергей Иванович
//Text='иванов сергей иванович'
console.log(Text.split(" ").map((word,i)=>{
var [ferst,...rest]=[...word]
return i?[ferst.toUpperCase()+'.']:[ferst.toUpperCase(),rest.join('').toLowerCase()].join('')
}).join(' '))
//return Иванов С. И.
var Text='Иванов С. И.'
var [ferst,two,tree]=Text.split(" ");
Text= [two,tree,ferst].join(' ')
console.log(Text)
//return С. И. Иванов
Выполнить что то по onEdit() в зависимости от имени листа
const sheet1=()=>console.log('sheet1')
const sheet2=()=>console.log('sheet2')
function onEdit(e){
var eNameSheet=e.range.getSheet().getName()
var sheetNameAction=['Sheet1','Sheet2']
var reduser={
['Аркуш1']:sheet1,
['Аркуш2']:sheet2,
}

reduser[eNameSheet]()

}
Повторим каждое значения в столбце указанное количество раз
var range = [
[1],
[''],
[2]
]
var n = 3
const dublik = (n, range) => range.reduce((total, el) => {
if (el[0]) {
var temp = []
temp.length = n
total.push(temp.fill([el[0]]))
};
return total;
}, []).flat();
console.log(dublik(n, range));
//return [ [ 1 ], [ 1 ], [ 1 ], [ 2 ], [ 2 ], [ 2 ] ]
Разделить текст после каждого n-го слова в Google Sheet (с помощью Regex и Split)
Логика:
1.Вставьте разделитель рыб после каждого n-го слова - используя REGEXREPLACE.
2.Разделите текст по разделителям рыбы - с помощью SPLIT.
3.Наконец, измените разделенные столбцы на строки - используя TRANSPOSE.

=TRANSPOSE(split(REGEXREPLACE(A1;"(([a-zA-Zа-яА-Я'‘’:.,_?!”“)(}{\]\[]+\s){5})"; "$1🐬");"🐬"))
Volond Apps
Photo
Добавим группы разрядов
/Добавим группы разрядов
// Декларативно
var thousandSeparator = function(str) {
var parts = (str + '').split('.'),
main = parts[0],
len = main.length,
output = '',
i = len - 1;

while (i >= 0) {
output = main.charAt(i) + output;
if ((len - i) % 3 === 0 && i > 0) {
output = ' ' + output;
}
--i;
}

if (parts.length > 1) {
output += '.' + parts[1];
}
return output;
};
//ФП
const toCent = num => num * 100;
const divideBy100 = num => num / 100;
const roundTo2dp = num => num.toFixed(2);
const addDollarSign = str => '$' + String(str);
const addSeparators = str => {
// add commas before the decimal point
str = str.replace(/(?<!\.\d+)\B(?=(\d{3})+\b)/g, ` `);
// add commas after the decimal point
str = str.replace(/(?<=\.(\d{3})+)\B/g, ` `);
return str;
};
const compose = (...fns) => x => fns.reduceRight((res, fn) => fn(res), x);
const centsToDollars = compose(
addSeparators,
addDollarSign,
roundTo2dp,
divideBy100,
toCent,
);
console.log(thousandSeparator('12345678.9')) //12 345 678.9

console.log(centsToDollars('12345678.9')) //$12 345 678.90
Можно ли сделать функцию getCommenters () в скрипте Google Apps?

Class DriveApp File скрипта Google Apps содержит следующие методы:

getViewers()
getEditors()

Но метод getCommenters недоступен.
(Это интересно, поскольку addCommenter addCommenters addCommenter , addCommenters и removeCommenter .)

Я делаю сценарий, в котором меняю права доступа к файлам и папкам на основе адресов электронной почты в электронной таблице.
Я хотел бы иметь функциональность getCommenters чтобы я мог сравнить, являются ли электронные письма комментатора в электронной getCommenters уже комментариями к файлу, поэтому не нужно будет снова addCommenters эти электронные письма с помощью addCommenters .
(Нажатие на него создаст новое электронное письмо для пользователя.)
Нет проблем в том, чтобы сделать это со средствами просмотра и редакторами, так как методы доступны.

Вопрос: возможно ли создать функцию, которая будет имитировать предполагаемую функциональность getCommenters ? Или хотя бы вытащить массив адресов электронной почты комментаторов?
Ответ
getViewers() возвращает зрителей и комментаторов. Вы можете отфильтровать список, используя getAccess() :

const getCommenters = (file) =>
file.getViewers().filter(user=>
file.getAccess(user) == "COMMENT")
Определение конкретного типа любого объекта
/*Определение конкретного типа любого объекта
Как мы знаем, в JavaScript есть пять примитивных типов данных и объектный тип данных.
Но знаете ли вы, что объектный тип данных можно подразделить на множество начальных типов?
Объект может быть ARRAY, FUNCTION, MAP,REGEXP и т. д.
Если мы хотим получить конкретный тип объекта, что нам делать?
*/

function toRawType(value) {
let _toString = Object.prototype.toString;

let str = _toString.call(value)

return str.slice(8, -1)
} //

console.log(toRawType(/\s/i)) // RegExp
console.log(toRawType([1, 2])) //Array
console.log(toRawType((() => console.log('1')))) //Function
#Snippet
Как правильно задавать вопросы, если ты начинающий айтишник
Тем
, кто уже стал, или еще только мечтает стать начинающим разработчиком, я могу дать следующие рекомендации:



1.Изучайте проблему самостоятельно
2.Сначала сообщайте цель, потом озвучивайте проблему
3.Пишите грамотно и по существу
4.Задавайте вопросы по адресу и делитесь решением
4.Уважайте чужое время
5.Смотрите шире


А теперь подробнее.
Изучаю Proxy
В
Google Apps Script, в связи с переходом на версию V8 , появилась новая возможность, которая пока используется не особенно широко. Речь идёт о прокси-объектах.

Прокси позволяют создавать обёртки для других объектов, организовывая перехват операций доступа к их свойствам и операций вызова их методов.
Причём, это работает даже для несуществующих свойств и методов проксируемых объектов.
далее
Замена по словарю

В дружественном чате возник вопрос если в тексте встречаются буквы латиницы которые похожи на кириллицу,как их найти и заменить.Получилось вполне симпатично ,причем данный #snippet вполне можно применять для решения задачи "Замена по словарю"
Принцип разделения функциональности (в табличных процессорах)
@oshliaer
ПРФ (в электронных таблицах) - предложение не использовать смешение функций табличных процессоров (ТП). Если разделить функции ТП на хранение, обработку и представление, то можно значительно упростить использование и расширить функционал рабочей модели, которую обслуживает ТП. Самый простой способ достижения этого - использовать правило: "одна функция - один лист". Например, для Таблицы Гугл, которая получает данные из Формы, функцию хранения выполняет лист, привязанный к Форме. Если необходимо как-то модифицировать данные, то необходимо использовать второй лист, для обработки. Если требуется распечатать или вывести на экран в читаемом виде текущие данные, то необходимо использовать третий лист - представление.
подробнее...
Собираем из всех листов значения кроме текущего
Добавляем уникальный ключ для строк
(Пользовательская формула)
таблица
Как сделать склонение числительных на javascript.
Без склонения числительных пользователь может увидеть «8 мортышка(ек)» или «4 трамваев» и т.д. Это не красиво и усложняет процесс восприятия интерфейса.

Поэтому для многих стало нормой делать системы, которые бы склоняли числительные, так, чтобы пользователю было удобно читать интерфейс, так, как будто интерфейс – живое существо.
#snippet #JS
clasp - The Apps Script CLI
Apps Script CLI, или clasp, это инструмент, позволяющий создавать, редактировать и развертывать проекты Apps Script локально. Он позволяет создавать и публиковать веб-приложения и надстройки для таких продуктов, как Таблицы, Документы, Формы и Слайды, из командной строки. Есть два способа разработки Apps Script: с помощью script.google.com или локально на вашем компьютере.
Инструкция
Вы также можете попробовать clasp в Gitpod, онлайн-среде IDE для GitHub
Что поддерживает V.8 Google Apps Script
Сводная таблица