Volond Apps
222 subscribers
216 photos
28 videos
22 files
994 links
Программирование для души и от лени
Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Download Telegram
В копилку #RegExp
Имееем URL вида
https://docs.google.com/spreadsheets/d/id/edit#gid=1196970840&range=D10
Получаем параметры(gid и range)
function getGitFromUrl(url) {return url.match(/[\?|\&|\#]([^=]+)\=([^&#]+)/g).map(function(el){var arr=el.replace(/[\#|\&]/g,"").split("="); return arr[1] });}

Создал памятку для переезда с Rhino на v8
Прямо в скрипте GAS

Справка Google
ECMAScript 6 equivalents in ES5

Внимание: модули ES6 пока не поддерживаются.
Но спасибо этой статье
можно обойти ограничения
Пример в скрипте
clasp clone 1AXWw8bubo07wSRf83he0gv0Q4DOuZbvMiHUKRqCtdUSRgWJpF1zy1qg8

Please note this document is very much a work in progress. Contributions are welcome.

Table of contents:

Arrow Functions
Block Scoping Functions
Template Literals
Computed Property Names
Destructuring Assignment
Default Parameters
Iterators and For-Of
Classes
Modules
Numeric Literals
Property Method Assignment
Object Initializer Shorthand
Rest Parameters
Spread Operator
Proxying a function object
Array-like object to array
About
Call object methods
Improved function detection
Multi-line strings
Не работающие !!!
Cвязки формул в Google Sheet
IMPORTRANGE() СРЗНАЧ()
IMPORTRANGE() СРЗНАЧА()
IMPORTRANGE() СРЗНАЧЕСЛИ()
IMPORTRANGE() СРЗНАЧЕСЛИМН()
IMPORTRANGE() СУММ()
IMPORTRANGE() СУММЕСЛИ(), СУММЕСЛИМН()
IMPORTRANGE() СЧЁТЕСЛИ(), СЧЁТЕСЛИМН()
IMPORTRANGE() СЧЁТЕСЛИ(), СЧЁТЕСЛИМН()
ARRAYFORMULA() БДСУММ()
ARRAYFORMULA() ДВССЫЛ()
ARRAYFORMULA() СМЕЩ()
ARRAYFORMULA() СРЗНАЧЕСЛИМН()
ARRAYFORMULA() СУММЕСЛИМН()
ARRAYFORMULA() ЯЧЕЙКА()
ARRAYFORMULA() FILTER()
ARRAYFORMULA() IFS()
ARRAYFORMULA() ISFORMULA()
ARRAYFORMULA() JOIN
ARRAYFORMULA() MAXIFS()
ARRAYFORMULA() MINIFS()
ARRAYFORMULA() QUERY
ARRAYFORMULA() SPARKLINE()
ARRAYFORMULA() ИНДЕКС()
ARRAYFORMULA() ISFORMULA()
ARRAYFORMULA() GOOGLETRANSLATE()
Автор подборки @akanat
#book
Есть задача:
Предположим, что у нас есть массив объектов, описывающих сленговые выражения викторианской эпохи.
Нужно отфильтровать те выражения, которые не встречаются в Google Books (свойство found соответствующих объектов равно false),
и найти среднюю оценку популярности выражений( свойство
popularity
).
Вот как могут выглядеть подобные данные:

const victorianSlang = [
{
term: 'doing the bear',
found: true,
popularity: 108,
},

term: 'katterzem',
found: false,
popularity: null,
},
{
term: 'bone shaker',
found: true,
popularity: 609,
},
{
term: 'smothering a parrot',
found: false,
popularity: null,
},
{
term: 'damfino',
found: true,
popularity: 232,
},
{
term: 'rain napper',
found: false,
popularity: null,
},
{
term: 'donkey’s breakfast',
found: true,
popularity: 787,
},
{
term: 'rational costume',
found: true,
popularity: 513,
},
{
term: 'mind the grease',
found: true,
popularity: 154,
},

];
Ваши Решения пишем в репостах к посту в группе или в комментариях

Готовим Симпатишное меню для Вашей таблицы Вкусно и Быстро
Раз
const ListOfMenu={
title:'Меню',
items:[['name','functionName'],
["🥑 Создать Меню","CreateMenuList"],
['⚡️ Удалить Меню','RemoveMenu'],
['🎉 Обновить Меню','UbdateMenu'],
['🔥 Создать Лист Меню','createMenuSheet']],

}
Два
const toObject = (array)=>{ const keys = array.shift();return array.map(values =>{ return keys.reduce((o, k, i)=> {o[k] = values[i];return o},{})})};
Три
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
const entries=toObject(ListOfMenu.items)
sheet.addMenu('Dmenu', entries);
};
Создать независимую копию JavaScript массива

В JavaScript все присваивания объектов реализуются через передачу ссылок на них.

var oldArray = ["a", "b", "c"];
var newArray = oldArray;

Хоть мы и получили две разные переменные, но тем не менее они обе ссылаются на один и тот же объект массива. Если сейчас в одном массиве произвести какие-либо манипуляции с элементами, то аналогичные изменения можно будет увидеть и в другом.

Если вы хотите сделать независимую копию массива, то нужно использовать метод slice без аргументов.

var oldArray = ["a", "b", "c"];
var newArray = oldArray.slice();

Массивы oldArray и newArray будут состоять из одних и тех же элементов, но фактически это будут разные объекты.

Важно запомнить, что если массив состоит из сущностей Array или Object, то они по прежнему будут ссылаться на родительские объекты.

P.S
. Медленный способ глубокого клонирования
Способ, который работает и в случае, когда в массиве есть массивы или объекты:

var newArray = JSON.parse(JSON.stringify(oldArray))

#памятка


Проблема:
Иногда нам необходимо обработать данные организованные с помощью
отступов (1С мать твою ...😡)
Google Sheet , к сожалению тоже ни чего не знает о таком способе форматирования

Решение: добавим пользовательскую функцию
Получение отступа ячейки в Excel => VBA

Function Отступ(Cell As Range)
'This function returns the indentation of a cell content

Application.Volatile
'With "Application.Volatile" you can make sure, that the function will be recalculated once the worksheet is recalculated
'for example, when you press F9 (Windows) or press enter in a cell

Отступ = Cell.IndentLevel
'Return the IndentLevel

End Function
#VBA #Excel
«Мне сказали, что невозможно создать скрипт, который будет печатать из Google Apps».
Я всегда очень любил и люблю «невозможные» задачи:
— Мы сами знаем, что она не имеет решения, — сказал Хунта, немедленно ощетиниваясь. — Мы хотим знать, как её решать.
Аркадий и Борис Стругацкие. Понедельник начинается в субботу
#GAS #GoogleCloudPrint

Последняя непустая ячейка в столбце
function getLastRowByColumn(range){
while(range.length>0 && range[range.length-1][0]=='') range.pop();
return range.length;
}
function getLastRow(){
return SpreadsheetApp.getActive().getLastRow()
}
#GAS
#customFunction
Подсчитайте количество слов и символов в документе Google

function getWordCount(fileId) {
const SEPARATOR = ' ';
const document = fileId
? DocumentApp.openById(fileId)
: DocumentApp.getActiveDocument();
const text = document.getBody().getText();
const words = text.replace(/\s+/g, SEPARATOR).split(SEPARATOR);
const characters = words.join('');
Logger.log("Word Count: " + words.length);
Logger.log("Character Length: " + characters.length);
}

Более продвинутая версия функции использует регулярные выражения и может работать с китайскими, японскими и корейскими скриптами - Credit .

function getWordCountCJK(data) {
var pattern = /[a-zA-Z0-9_\u0392-\u03c9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g;
var m = data.match(pattern);
var count = 0;
if( m === null ) return count;
for (var i = 0; i < m.length; i++) {
if (m[i].charCodeAt(0) >= 0x4E00) {
count += m[i].length;
} else {
count += 1;
}
}
return count;
}


function getWordCount(fileId) {
const SEPARATOR = ' ';
const document = fileId
? DocumentApp.openById(fileId)
: DocumentApp.getActiveDocument();
const text = document.getBody().getText();
const count = getWordCountCJK(text);
Logger.log("Word Count: " + count);
}
Очистка данных с помощью Google Sheets: пристальный взгляд
В Google Sheets есть 3 формулы, которые помогут Вам сэкономить огромное количество времени Вот они:

ImportXml
QUERY
REGEXEXTRACT

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

Оригинал
Пример

Если вы заинтересованы в получении дополнительной информации, вот список отличных ресурсов:

Xpath Data Scraping Tutorial видео (для пользователей ПК)
Руководство ImportXML для Документов Google
Руководство контент-маркетолога по очистке данных
Как получить максимум от Regex

Для анализа используйте расширение ChroPath

#GoogleSheet #Regex #ImportXML #расширение
Недокументированные проблемы ограничения API листов
Когда UrlFetchApp напрямую вызывает конечную точку Sheets API, если размер ответа превышает 50 МБ (52 428 800 байт), возвращается ответ менее 50 МБ. Размер 50 МБ обусловлен ограничением UrlFetchApp. С другой стороны, в Advanced Google Service он не может подтвердить эту ситуацию, потому что ошибка возникает, когда она превышает ограничение.
Читать далее
#SheetAPI #UrlFetchApp
Уважаемый мной tanaike предложил хорошую идею
цитую "Подивіться, чи не можемо ми створити щось на кшталт "npm для Apps Script" ??"
База даних скриптов Google Apps в формате JSON
В переписке с Эндрю Робертс и вдохновленный еще одним ГУРУ Bruce Mcpherson с
его Apps Script shared library list ( 136 шт Карл!!! )
Воспользовавшись библиотекой IMPORTJSONAPI
Имеем обновляемую таблицу с следущими полями
libraryName,description,siteUrl,publishedDate,projectKey,tags,authors,description
Так же эта тема обсуждаеться тут
Есть объедененный Google Apps Script Library Database(239 шт)
Здесь живет PackageManager
А здесь Search Google Apps Script Libraries
А также У програмі Google Apps Script Slack WorkSpace є новий канал - proj_library_database
Известный французский ученый-компьютерщик Жак Шазарен опубликовал бесплатную электронную книгу, которая выглядит как идеальный ресурс и доступна на французском и английском языках.