Volond Apps
Open in Telegram
Программирование для души и от лени Добро пожаловать! У нас есть отличное сообщество любителей Excel и VBA, Google Sheet и Google Apps Script, а также всех тех, кто готов работать с этим программным обеспечением. Присоединяйтесь к нам, чтобы задавать и от
Show more246
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
246
Хабрахабр:Парсинг Яндекс Карт или как найти целевую аудиторию
Как написать парсер Яндекс Карт? А также аналитика данных организаций. Поиск целевой аудитории Читать далее
246
Node Express redirect (А Также другие уроки!!!!!)
https://masteringjs.io/tutorials/express/redirect
246
/** * Форма с добавлением в верх списка того же листа V/2 * Очистка заполненой формы */
function formAdd(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet=ss.getSheetByName('Аркуш4')
var formRange=sheet.getRange('A2:C2')
var values=formRange.getValues()[0]
values[0]=new Date().getTime()
sheet.appendRow(values)
SpreadsheetApp.flush()
var lastRow=sheet.getLastRow()
sheet.getRange('A4:C'+lastRow).sort([{column: 1, ascending: false}])
formRange.clearContent()
}246
https://www.benlcollins.com/spreadsheets/slow-google-sheets/
Вперед к оптимизации ибо все вышеперечисленное может тормозить таблицу
246
Это обсуждали тут
https://stackoverflow.com/questions/46923770
И я сегодня написал свою функцию для тестирования скорости работы формул массива. Мой вариант среди ответов.
246
=map(A2:A20;LAMBDA(x;SPARKLINE(1;{"charttype"\"column";"color"\VLOOKUP(x;Source!$A$1:$C$8;3;false)})))
цвет берем отсюда246
.xlsx изнутри. Разбор структуры файлов. Разбор каждого .xml файла
https://habr.com/ru/post/593397/#relsrels
Примеры использования для GAS
https://tanaikech.github.io/2022/09/28/retrieving-named-functions-from-google-spreadsheet-using-google-apps-script/
Отступ для EXCEL
https://youtu.be/PimqwBF-oHo
Алгоритм для GAS
1C Делает группировку и уровни показывает отступами
Чаще всего в одном крайне левом столбце
Ищем в xl/worksheets/sheet1.xml
<row r="1" spans="1:1" x14ac:dyDescent="0.25"> <c r="A1" s="1"> <v>1</v> </c> </row> <row r="2" spans="1:1" x14ac:dyDescent="0.25"> <c r="A2" s="2"> <v>2</v> </c> </row>Теги с содержащие в себе r с буквой необходимого столбца а также имеющие параметр s Например:s="2" Потом Ищем в xl/styles.xml
<cellXfs count="3"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"> <alignment horizontal="left" indent="5"/> </xf> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0" applyAlignment="1"> <alignment horizontal="left" indent="10"/> </xf> </cellXfs>где каждая строка это стиль номер которого указан в параметре s в нем
indentкак раз отвечает за размер отступа
<alignment horizontal="left" indent="10"/>
246
/**
* Последнее заполненное значение( Итоговое не считаеться)
* по контрагенту в сводной таблице
* https://docs.google.com/spreadsheets/d/1grRWdal_u60lzmj2Ubhi6k9rL3ajvg4hJt8A1M7exu4/edit#gid=0
* @customfunction
*/
function getData(data, contr) {
var res = []
var rows = data
.filter(e => e[2] == contr)
.forEach(r => {
r.pop()
r = r.reverse()
var i = r.length - r.findIndex(e => e)
res.push(i)
})
var index = Math.max(...res)
return data[1][index - 1] + " " + data[0][index - 1]
}246
По поводу моего вчерашнего вопроса. Я смог получить доступ к ID пользователя через ручной запуск скрипта без адских пермишинов на весь аккаунт пользователя. Для этого нужно всего лишь....
/** * @OnlyCurrentDoc */указать данную директиву в начале файла. Подробнее читайте здесь. Далее всё уже вроде просто в моём учебном проекте. Другой вопрос. Что это за адская дичь, когда пермишены по умолчанию дают доступ ко всему аккаунту гугл драйв пользователя? В чёт тут смысл? Это же капец небезопасно.
246
Всем привет! Хочу поделиться своей новой утилитой для переключения scriptId в clasp. Надеюсь кому-то будет полезно. https://www.npmjs.com/package/clasp-env
246
function getDistance(origin, destination) {
// return distance in meters
var lon1 = toRadian(origin[1]),
lat1 = toRadian(origin[0]),
lon2 = toRadian(destination[1]),
lat2 = toRadian(destination[0]);
var deltaLat = lat2 - lat1;
var deltaLon = lon2 - lon1;
var a = Math.pow(Math.sin(deltaLat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(deltaLon/2), 2);
var c = 2 * Math.asin(Math.sqrt(a));
var EARTH_RADIUS = 6371;
return c * EARTH_RADIUS * 1000;
}
function toRadian(degree) {
return degree*Math.PI/180;
}
var distance = getDistance([lat1, lng1], [lat2, lng2])