sync
. Ибо это работает как лом - надежно и безотказно. Главное знать, когда использовать можно.const values = s.getRange(1, col1, s.getLastRow(), col1).getValues();
const count = values.filter(
(row, i, arr) => arr[i + 1] && compareAsDate_(row[0], arr[i + 1][0])
);
console.log(count);
/**
*
* @param {any} a
* @param {any} b
*/
function compareAsDate_(a, b) {
return (
a && b && a.getTime && b.getTime && a.toDateString() === b.toDateString()
);
}
~/.cache/google-chrome/Default/Cache
""&C5:C12
=IMPORTXML(
"https://www.gismeteo.ru/weather-moscow-4368/";
"//div[@class='tab-content']//span[contains(@class,'unit_temperature_c')]"
)
onEdit
- это зарезервированная функция простого триггера события EDIT
. Большинству это ничего не говорит, но в этом кроется вся "тайна".EDIT
может вызвать только пользователь, только при редактировании значения ячейки непосредственно через браузер или через мобильное приложение. Т.о. ваш код работать не будет при обновлении данных через функции импорта.function runOnEdit() {
var source = SpreadsheetApp.openById('ABCD123456');
var range = source.getRangeByName('Sheet!!B26');
/**
* @type {GoogleAppsScript.Events.SheetsOnEdit}
*/
var e = {
authMode: ScriptApp.AuthMode.LIMITED,
oldValue: undefined, // ну или что хотите
range: range,
value: range.getValue(),
source: source,
triggerUid: 0,
user: Session.getActiveUser(),
};
onEdit(e);
}
=COUNTA(UNIQUE(TRANSPOSE(
SPLIT(
TEXTJOIN(
",";
1;
FILTER($B$2:$B2;EOMONTH($A$2:$A2;0)=EOMONTH($A2;0)));
", "
)
)))
var conn = Jdbc.getConnection(
'jdbc:mysql://sql4.freemysqlhosting.net:3306/sql427628?useUnicode=true&characterEncoding=UTF-8',
'sql427628', '****');
var stmt = conn.createStatement();
stmt.setMaxRows(1000);
var start = new Date();
var rs = stmt.executeQuery('select * from person');
var row = 0;
while (rs.next())
for (var col = 0; col < rs.getMetaData().getColumnCount(); col++)
console.log(rs.getString(col + 1));
rs.close();
stmt.close();
conn.close();
var MENU = [
{
caption: 'Пункт меню 1',
functionName: 'itemMenu',
},
{
caption: 'Пункт меню 2',
functionName: 'itemMenu',
},
{
caption: 'Пункт меню 3',
functionName: 'itemMenu',
},
];
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Test');
MENU.forEach(function(item, i) {
menu.addItem(item.caption, item.functionName + i);
});
menu.addToUi();
}
itemMenu
работает как-то такfunction itemMenu(e) {
var caption = e.item.caption;
var order = e.order;
Browser.msgBox(
Utilities.formatString('Был нажат %sй пункт меню: %s', order + 1, caption)
);
}
(function(self) {
MENU.forEach(function(item, i) {
self[item.functionName + i] = function() {
return self[item.functionName]({ item: item, order: i });
};
});
})(this);