https://t.me/google_sheets/450
Немного пошаманил с кодом перевел на Web App
Замечания и комментарии приветствуются!
Добавил дополнительные поля
id,Тип , Дата последнего изменения и просмотра
Немного пошаманил с кодом перевел на Web App
Замечания и комментарии приветствуются!
function doGet(e) {
// var cnf=this[e.parameters.cnf]()
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sh = ss.getActiveSheet();
var output = ContentService.createTextOutput()
var request = '\'' + e.parameters.id + '\' in parents';
var data= rasparce(search(request))
data.unshift(['id', 'URL','Названия файла','Тип файла','Дата изменения','Дата последнего просмотра','URL папки'])
output.setContent(JSON.stringify(data));
output.setMimeType(ContentService.MimeType.JSON);
return output
}
Изменения в оригинале:Добавил дополнительные поля
id,Тип , Дата последнего изменения и просмотра
function search(request, pageToken){
var optionalArgs = {
q: request,
maxResults: 1000,
orderBy: 'modifiedDate desc',
fields:
'items(id, title, parents(id), alternateLink, permissions, hasAugmentedPermissions,mimeType,modifiedDate,lastViewedByMeDate), nextPageToken'
};
//(type, id)
if (pageToken) {
optionalArgs.pageToken = pageToken;
}
var list = Drive.Files.list(optionalArgs);
var files = list.items;
if (list.nextPageToken) {
return files.concat(search(request, list.nextPageToken));
}
return files;
}
function rasparce(files){
var arr = []
for (var j in files) {
var file = files[j];
var lastView=file.lastViewedByMeDate?file.lastViewedByMeDate:""
arr.push([file.id,file.alternateLink, file.title, file.mimeType,file.modifiedDate,lastView,'https://drive.google.com/drive/folders/' + file.parents[0].id])
}
return arr
}
Тест doGet()function TESTdoGET() {
var idFolder='Укажите id Вашей Папки'//
var queryString = "?id="+idFolder
var url = ScriptApp.getService().getUrl() + queryString;
//Ссылку можно вставить в браузер
Logger.log(url)//
var options =
{
"method" : "GET",
"followRedirects" : true,
// "muteHttpExceptions": true
};
var result = UrlFetchApp.fetch(url, options);
if (result.getResponseCode() == 200) {
var params = JSON.parse(result.getContentText());
//Вывод заголовков и 1 строки результата
Logger.log(params[0]);
Logger.log(params[1]);
}
}Telegram
Google Таблицы
Скрипт: создаем каталог из файлов выбранной папки в Google Таблице. Google Drive Api.
Как работает:
1) вам нужно сделать копию таблицы
2) ввести в ячейку «B1» ID папки
3) запустить из меню [ с к р и п т ы ] единственный скрипт
Скрипт рекурсивный, он будет…
Как работает:
1) вам нужно сделать копию таблицы
2) ввести в ячейку «B1» ID папки
3) запустить из меню [ с к р и п т ы ] единственный скрипт
Скрипт рекурсивный, он будет…
В копилку #RegExp
Имееем URL вида
https://docs.google.com/spreadsheets/d/id/edit#gid=1196970840&range=D10
Получаем параметры(gid и range)
Имееем 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] });}ТыцБот https://docs.google.com/spreadsheets/d/10YwSwAr6-BFHjy6Ogo3V8K9T8H3qPZhyP3APBEh5hdg/edit?usp=drivesdk
#bot
#bot
Google Docs
тыцБот
bot
botToken,255601800:AAGb9DWprRlSoFf5MQr6rBsVRN_YgZ4Cgjs,@BotFather
chatId,192818801,@getmyid_bot,<a href="https://t.me/getmyid_bot">https://t.me/getmyid_bot</a>
text,11.05.2021\ntext2\n11.05.2021\ntext1
url,<a href="https://api.telegram.org/bot">http…
botToken,255601800:AAGb9DWprRlSoFf5MQr6rBsVRN_YgZ4Cgjs,@BotFather
chatId,192818801,@getmyid_bot,<a href="https://t.me/getmyid_bot">https://t.me/getmyid_bot</a>
text,11.05.2021\ntext2\n11.05.2021\ntext1
url,<a href="https://api.telegram.org/bot">http…
ᅠ
Создал памятку для переезда с 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
Создал памятку для переезда с 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
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
Telegram
Kanat A.
expert@googlesheets.pro
Есть задача:
Предположим, что у нас есть массив объектов, описывающих сленговые выражения викторианской эпохи.
Нужно отфильтровать те выражения, которые не встречаются в Google Books (свойство found соответствующих объектов равно false),
и найти среднюю оценку популярности выражений( свойство
popularity
).
Вот как могут выглядеть подобные данные:
Предположим, что у нас есть массив объектов, описывающих сленговые выражения викторианской эпохи.
Нужно отфильтровать те выражения, которые не встречаются в 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 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);
};
Готовим Симпатишное меню для Вашей таблицы Вкусно и Быстро
Раз
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 все присваивания объектов реализуются через передачу ссылок на них.
Если вы хотите сделать независимую копию массива, то нужно использовать метод slice без аргументов.
Важно запомнить, что если массив состоит из сущностей Array или Object, то они по прежнему будут ссылаться на родительские объекты.
P.S. Медленный способ глубокого клонирования
Способ, который работает и в случае, когда в массиве есть массивы или объекты:
В JavaScript все присваивания объектов реализуются через передачу ссылок на них.
var oldArray = ["a", "b", "c"];Хоть мы и получили две разные переменные, но тем не менее они обе ссылаются на один и тот же объект массива. Если сейчас в одном массиве произвести какие-либо манипуляции с элементами, то аналогичные изменения можно будет увидеть и в другом.
var newArray = oldArray;
Если вы хотите сделать независимую копию массива, то нужно использовать метод slice без аргументов.
var oldArray = ["a", "b", "c"];Массивы oldArray и newArray будут состоять из одних и тех же элементов, но фактически это будут разные объекты.
var newArray = oldArray.slice();
Важно запомнить, что если массив состоит из сущностей 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
Проблема:
Иногда нам необходимо обработать данные организованные с помощью
отступов (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
Я всегда очень любил и люблю «невозможные» задачи:
— Мы сами знаем, что она не имеет решения, — сказал Хунта, немедленно ощетиниваясь. — Мы хотим знать, как её решать.
Аркадий и Борис Стругацкие. Понедельник начинается в субботу
#GAS #GoogleCloudPrint
Хабр
Печать из Google Apps Script
Часть 1. Challenge Читая ленту на oDesk, наткнулся на интересный проект по моему направлению (а я отслеживаю, в основном, задачи на написать что-то, прикрутить ч...
ᅠ
Последняя непустая ячейка в столбце
Последняя непустая ячейка в столбце
function getLastRowByColumn(range){
while(range.length>0 && range[range.length-1][0]=='') range.pop();
return range.length;
}
function getLastRow(){
return SpreadsheetApp.getActive().getLastRow()
}
#GAS #customFunctionGoogle Docs
getLastRowByColumn.png