Выводим список День + Название Дня недели
const getDaysArray = (year, month) => {
year = year || new Date().getFullYear()
month = month || new Date().getMonth()+1
console.log(month)
const names = Object.freeze(
['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']);
const date = new Date(year, month - 1, 1);
const result = [];
while (date.getMonth() == month - 1) {
result.push(`${date.getDate()}-${names[date.getDay()]}`);
date.setDate(date.getDate() + 1);
}
return result;
}
//[ '1-fri','2-sat',....,'30-sat','31-sun' ]
#JS #dateForwarded from volond
=query(A2:A,"select A where " & textjoin(" and ",true,ARRAYFORMULA(" A contains '" & QUERY({B2:C},"select Col2 where Col1=True") &"'")))Forwarded from Ботоводство на Google Apps Script и не только...
Аудит Google Drive
Сценарий ListFilesFolders: это скрипт Google Apps, в котором перечислены все файлы и / или папки в
* Папка Google Диска, а затем записывает список в электронную таблицу партиями. В скрипте используется
* механизм кэширования, позволяющий восстанавливать вывод после возможного сбоя; однако это не будет продолжаться
* чтобы восстановить прерванный скрипт и продолжить поиск.
Сценарий ListFilesFolders: это скрипт Google Apps, в котором перечислены все файлы и / или папки в
* Папка Google Диска, а затем записывает список в электронную таблицу партиями. В скрипте используется
* механизм кэширования, позволяющий восстанавливать вывод после возможного сбоя; однако это не будет продолжаться
* чтобы восстановить прерванный скрипт и продолжить поиск.
Gist
[Google Apps Script] List all files & folders in a Google Drive folder, & write into a speadsheet
[Google Apps Script] List all files & folders in a Google Drive folder, & write into a speadsheet - appsScript_ListFilesFolders_ver.2.js
PropertyServices
Упрощает использование PropertyServices сценариев Google Apps. Может обрабатывать объекты и сохранять значения даты.
Пример
Упрощает использование PropertyServices сценариев Google Apps. Может обрабатывать объекты и сохранять значения даты.
Пример
// initialize available stores, with sensible default values
const lib = Properties.scriptStore(); // or
const lib = Properties.userStore(); // or
const lib = Properites.documentStore();
// set keys to values of any kind, including nested objects with dates!
lib.set('key', 564);
lib.set('obj', {nested: [1, 2, new Date(), 400.2, {hi='hi'}]});
// retrieve values with get
const value = lib.get('obj')
value.nested[4].hi; // 'hi'
// retrieve keys with getKeys
const keys = lib.getKeys(); // array
// bulk update
lib.setProperties({
key: 0,
obj: {}
});
// remove keys
lib.remove('key'); // just the one
lib.removeAll(); // all of them
// get everything
// (possibly very slow: goes through each key and stores onto new object)
const props = lib.getAll(); // returns key value objectGitHub
modularLibrariesV8/Properties.js at master · classroomtechtools/modularLibrariesV8
Collection of libraries for Google AppsScripts with V8 engine - modularLibrariesV8/Properties.js at master · classroomtechtools/modularLibrariesV8
This media is not supported in your browser
VIEW IN TELEGRAM
Измените порядок файлов в проекте Apps Script #newIDE
This media is not supported in your browser
VIEW IN TELEGRAM
Мульти-курсор для одновременного редактирования нескольких строк
[ALT] + click,
чтобы вставить
#newIDE
[ALT] + click,
чтобы вставить
#newIDE
This media is not supported in your browser
VIEW IN TELEGRAM
Скопируйте строку ниже или выше
с помощью
[ALT] + [SHIFT] + [UP] или [ALT] + [SHIFT] + [DOWN]
#newIDE
с помощью
[ALT] + [SHIFT] + [UP] или [ALT] + [SHIFT] + [DOWN]
#newIDE
Как отфильтровать массив объектов по атрибутам?
var obj = {
'homes': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
},
// ... (more homes) ...
]
};
// (Note that because `price` and such are given as strings in your object,
// the below relies on the fact that <= and >= with a string and number
// will coerce the string to a number before comparing.)
var howToFilterObjectArrayBasedOnAttributes=()=>{
var newArray = obj.homes.filter(function (el) {
return el.price <= 1000 &&
el.sqft >= 500 &&
el.num_of_beds >= 2 &&
el.num_of_baths >= 1.5; // Changed this so a home would match
});
console.log(newArray);
}
#JS #array #object #filterИногда нужно выставить или снять много "флажков" за один раз
•••••••••
#JS #onEdit #dataValidation #trigger
•••••••••
#JS #onEdit #dataValidation #trigger
Telegraph
Выставить или снять все "Флажки"
Написано для канала Volond Apps в соавторстве с каналом @Google Таблицы и группы Чат | Google Таблицы и скрипты Иногда нужно выставить или снять много флажков за один раз есть прекрасный способ от Yagisanatode
Пользовательский формат чисел в Google Таблицах
Правила пользовательского формата чисел в Google Таблицах используются для определения специальных правил форматирования чисел.
Эти настраиваемые правила управляют отображением чисел на листе без изменения самого числа. Это визуальный слой, добавленный поверх числа. Это мощный метод, поскольку вы можете комбинировать визуальные эффекты, не изменяя данные.
•••••
Пользовательский формат чисел в Google Таблицах
#cusomformat
Правила пользовательского формата чисел в Google Таблицах используются для определения специальных правил форматирования чисел.
Эти настраиваемые правила управляют отображением чисел на листе без изменения самого числа. Это визуальный слой, добавленный поверх числа. Это мощный метод, поскольку вы можете комбинировать визуальные эффекты, не изменяя данные.
•••••
Пользовательский формат чисел в Google Таблицах
#cusomformat
Forwarded from Жабаскрипт (веде Віктор Турський)
Как мы создавали высокопроизводительный движок электронных таблиц на JavaScript
Наконец-то появилось видео моего оновленного доклада про Excel на JavaScript.
Это самая полная версия доклада. Немного прошелся по архитектуре и показал реальные демо.
Представьте, что перед вами стоит задача сделать движок электронных таблиц (без UI), совместемый с MS Excel. И задача движка запускать огромные математические модели на сотни тысяч формул с производительностью близкой к оригинальному движку Excel. Нам пришлось выжимать все до последнего с JavaScript. Это тот проект, который нельзя реализовать без знания алгоритмов, структур данных, внутренностей V8.
Если интересно на что способен JS, то доклад должен понравиться 😀
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=08bkGZTGxjM
Наконец-то появилось видео моего оновленного доклада про Excel на JavaScript.
Это самая полная версия доклада. Немного прошелся по архитектуре и показал реальные демо.
Представьте, что перед вами стоит задача сделать движок электронных таблиц (без UI), совместемый с MS Excel. И задача движка запускать огромные математические модели на сотни тысяч формул с производительностью близкой к оригинальному движку Excel. Нам пришлось выжимать все до последнего с JavaScript. Это тот проект, который нельзя реализовать без знания алгоритмов, структур данных, внутренностей V8.
Если интересно на что способен JS, то доклад должен понравиться 😀
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=08bkGZTGxjM
YouTube
"How to create a high performance Excel engine in JS – Odessa #TechTalks, Viktor Turskyi
Приглашаем вас поговорить об архитектуре, алгоритмах, оптимизации производительности JavaScript. Также Виктор Турский расскажет, как он со своей командой создали собственный движок электронных таблиц, совместимый с MS Excel, который позволяет им запускать…
Forwarded from Max Makhrov
Друзья, привет!
Сегодня я обнаружил, что в выпадающие списки можно вставлять не только абсолютные, но и относительные ссылки.
Это просто 🔥!
Дает возможность сделать 2-мерные многострочные связанные выпадающие списки без скриптов.
Демо:
https://docs.google.com/spreadsheets/d/1Vuq9_jJHgLJ7fe6yF0EZEERlo0LTChXezhqHjLUwmaY/copy
Сегодня я обнаружил, что в выпадающие списки можно вставлять не только абсолютные, но и относительные ссылки.
Это просто 🔥!
Дает возможность сделать 2-мерные многострочные связанные выпадающие списки без скриптов.
Демо:
https://docs.google.com/spreadsheets/d/1Vuq9_jJHgLJ7fe6yF0EZEERlo0LTChXezhqHjLUwmaY/copy
Управляйте защищенными диапазонами и листами в Google Таблицах с помощью Apps Script
Итак, давайте посмотрим, как это сделать в с помощью #GAS.
Допустим, вы хотите запретить кому-либо, кроме себя, редактировать ячейки A1: B10:
Итак, давайте посмотрим, как это сделать в с помощью #GAS.
Допустим, вы хотите запретить кому-либо, кроме себя, редактировать ячейки A1: B10:
// Protect range A1:B10, then remove all other users from the list of editors.Или, может быть, вы хотите удалить все защиты диапазона во всей электронной таблице:
var ss = SpreadsheetApp.getActive();
var range = ss.getRange('A1:B10');
var protection = range.protect().setDescription('Sample protected range');
// Ensure the current user is an editor before removing others. Otherwise, if the user's edit
// permission comes from a group, the script will throw an exception upon removing the group.
var me =Session.getEffectiveUser();protection.addEditor(me);protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) { protection.setDomainEdit(false);
}
// Remove all range protections in the spreadsheet that the user has permission to edit.Или, возможно, вы хотите защитить весь лист, но вырезать в нем небольшое отверстие - незащищенный диапазон на защищенном листе, - который другие все еще могут редактировать:
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
if (protection.canEdit()) {
protection.remove();
}
}
// Protect the active sheet except B2:C5,
// then remove all other users from the list of editors.
var sheet = SpreadsheetApp.getActiveSheet();
var protection = sheet.protect().setDescription('Sample protected sheet');
var unprotected = sheet.getRange('B2:C5');
protection.setUnprotectedRanges([unprotected]);
// Ensure the current user is an editor before removing others.
// Otherwise, if the user's edit permission comes from a group,
// the script will throw an exception upon removing the group.
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()){
protection.setDomainEdit(false);
}