Volond Apps
221 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
Как сделать склонение числительных на 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
Сводная таблица
🛠GAS-LIB🛠
Автозаполнение скриптов Google Apps в вашей IDE

Installation
npm install --save-dev gas-lib
Ваши собственные всплывающие окна, удобные для CSS / XHTML
ссылка
Forwarded from St M
Для быстрого доступа к видосам , выкладываю ссылки на все плейлисты по всем сервисам на которые есть видео:

Google Sheets (Таблицы Гугл) Lessons: https://www.youtube.com/playlist?list=PLlHR3f8sb05BNZ_mWF0Qt2oqnHKwOSJRf

Фишки, Трюки и Лайфхаки Гугл Таблиц: https://www.youtube.com/playlist?list=PLlHR3f8sb05Cz8TH3s_wRAZkjVqGttZS4

Google Apps Script, Скрипты в Гугл таблицах: https://www.youtube.com/playlist?list=PLlHR3f8sb05B9n0jnXgS3yxn2CTQ3XOGS

Уроки по Гугл Формам
https://www.youtube.com/watch?v=OGHl45NwzhI&list=PLlHR3f8sb05DqlFCMfek-Nbje-9lJaDfY

Новости Google Таблиц.: https://www.youtube.com/playlist?list=PLlHR3f8sb05CDpAMfg6l5liYSUP35HOu2

Google Docs, Гугл Докс, Гугл документы - уроки!: https://www.youtube.com/playlist?list=PLlHR3f8sb05DV0FdQl1IC5zx14Ub52YF0
Получение периода в Зависимости от дня формирования
Мне иногда необходимо получить период отчета в зависимости от дня
когда я его формирую
То есть если допустим сегодня 1 число а день отчета 7 дней
то получу период Прошлый месяц
а если сегодня 10 то период будет с начала текущего месяца по сегодня
далее...
getLastDayOfMonth.png
108.4 KB
Последний день месяца
/**
* Последний день месяца
*
* @param {Number} year
* @param {Number} month
* @returns {Date}
*/
function getLastDayOfMonth(year, month) {
//0-11 Номера месяцев
let date = new Date(year, month + 1, 0);
return date.getDate();
}
formatToday.png
182.9 KB
Форматирование даты
/**
* Форматирование даты
* 31-10-20 при delim="-" и format="dd,mm,yy"
* @param {Date} today
* @param {string} [delim="."]
* @param {string} [format="dd,mm,yyyy"]
* @returns {string}
*/
function formatToday(today,delim=".",format="dd,mm,yyyy") {
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
var yy=[...yyyy.toString()].splice(2).join("")
if (dd < 10) { dd = '0' + dd }
if (mm < 10) { mm = '0' + mm }
eval(`var arr=[${format}]`)
today = arr.join(delim)// dd + '.' + mm + '.' + yyyy;
return today


}
Получаем динамические области экрана
var getRangesByPattern=()=>{
// Исходные данные
var ss=SpreadsheetApp.getActiveSpreadsheet()
var sheet=ss.getSheetByName('Щоденник')
var dataRange=sheet.getDataRange()
var findArr=dataRange.getValues()
var findCol=1
var Cols=10
// Патерны и функция поиска
var startPr=q=>/Дата приймання/i.exec(q[findCol])
var endPr=q=>/Всього.*/i.exec(q[findCol])
var find=(a,pred)=>a.findIndex(pred)

//Получаем диапазоны с листа
var headerOrderN=find(findArr,startPr)
var headerOrder=sheet.getRange(1, 2,headerOrderN,Cols)
var headerMain=sheet.getRange(headerOrderN+1, 2,1,Cols)
var mainN=find(findArr,endPr)
var main=sheet.getRange(headerOrderN+2, 2,mainN-headerOrderN-1,Cols)
var footer=sheet.getRange(mainN, 2,dataRange.getLastRow()-mainN-1,Cols)
console.log(main.getA1Notation())
return {headerOrder,headerMain,main,footer}

}
"Псевдоразделение" в Ячейке Google Sheet+Стрелки

="↙️ f"&char(10)&Rept("-";10)&char(10)&"b ↘️"
#formula
Удалили лист и слетели все формулы...HELP ME‼️
не
беда: ФОРМУЛЫ можно восстановить ... 🚑
function myFunction() {
var nameDelSheet = "Меня удалили"
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
var range = sheets.filter(sh => sh.getName() != nameDelSheet).map(sh => {
var range = sh.getDataRange()
range.setFormulas(range.getFormulas())
}
Запускаем функцию "фоново"
Оригинал: Bruce Axtens

В последнее время я пробиваю 6-минутную стену таймаута в Apps Script.
Моя проблема заключается в том, чтобы поместить имена функций, которые я хочу запускать в фоновом режиме, в свойство скрипта, а затем извлекать их каждый раз при срабатывании таймера. Это, конечно, ограничено одной функцией в минуту. Во 2 части я покажу, как увеличить это значение до 4 в минуту, и, возможно, на любую долю минуты (с помощью устанавливаемых триггеров .)

Кроме того, это должны быть функции, которые не требуют каких-либо параметров и могут работать в фоновом режиме.


Читать полностью...
This media is not supported in your browser
VIEW IN TELEGRAM
Подсветка значений которые округлены с помощью пользовательского формата

Иногда
нужно понять какие числа были округлены
ссылка на таблицу с кодом
ссылка на исходный код
runSelectionAll.png
215.3 KB
**
* Пакетное выполнение функции в выделенном диапазоне
* Функция принимает ячейку как RANGE
* var fn=(cell)=>console.log(cell.getA1Notation())
* runSelectionAll(fn)
* @param {Function} fn Функция которая будет исполняться над каждой ячейкой диапазона
*/
function runSelectionAll(fn){


const ss = SpreadsheetApp.getActiveSpreadsheet()
const sheet = ss.getActiveSheet()
var selection = sheet.getSelection();
var ranges = selection.getActiveRangeList().getRanges();
ranges.forEach(range=>{
var res=expandA1Notation([range.getA1Notation()])
var rangeList=sheet.getRangeList(res[0]).getRanges()
rangeList.forEach(fn)
})

}
Захотелось получать ссылку на регион как в Excel
Задаем
ссылку вида:

[root\Имя Папки\Имя таблицы]'Имя листа'!А1
Вот что получилось: