"dd.MM.yyyy"
и "HH:mm:ss"
.const dateTimeStart = sheets.getRange('C1').getValue();
dateTimeEnd
- только вам известно, но в итоге, полученный dateTimeStart
подходит для передачи в качестве значений аргументов в методы CalendarApp
. /**
*
*/
function onEdit(e) {
const sheetName = 'Sheet6'; // Имя листа, который отслеживается
const colToStamp = 7; // Номер колонки для даты
if (e && e.range && e.range.getRow() > 9 && e.range.getColumn() == 6) {
const sheet = e.range.getSheet();
if (sheet.getName() == sheetName) {
const writeVal =
e.value == true || e.value == 'TRUE' || e.value == 'ИСТИНА'
? new Date()
: '';
sheet.getRange(e.range.rowStart, colToStamp).setValue(writeVal);
SpreadsheetApp.getActive().toast('Обновлено');
}
}
}
/**
*
*/
function createTrigger() {
ScriptApp.getProjectTriggers().forEach(
(trigger) =>
trigger.getHandlerFunction() === 'saveData' &&
trigger.getEventType() === ScriptApp.EventType.CLOCK &&
(ScriptApp.deleteTrigger(trigger) ||
console.info(`Tirgger ${trigger.getUniqueId()} was deleted`))
);
// every minutes for testing
// ScriptApp.newTrigger('saveData').timeBased().everyMinutes(1).create();
// at 9 o'clock every days
ScriptApp.newTrigger('saveData').timeBased().atHour(9).everyDays(1).create();
}
/**
*
*/
function saveData() {
const book = SpreadsheetApp.openById(
'1FUSSiDQoXyvKXfzYydoUUfcCGYq_TskpRiwfb28_1Z0'
);
const sheet = book.getSheetByName('Лист1');
const value = sheet.getRange('A1').getValue();
book.getSheetByName('Лист2').appendRow([new Date(), value]);
console.info(`saveData was called successful`);
}
1FUSSiDQoXyvKXfzYydoUUfcCGYq_TskpRiwfb28_1Z0
на ваш.Лист1!A1
и добавляет новую строку на Лист2
.createTrigger
один раз./**
* @see https://gist.github.com/penguinboy/762197#gistcomment-3448642
*/
function flatten(object, path = null, separator = '.') {
return Object.keys(object).reduce((acc, key) => {
const value = object[key];
const newPath = Array.isArray(object)
? `${path ? path : ''}[${key}]`
: [path, key].filter(Boolean).join(separator);
const isObject = [
typeof value === 'object',
value !== null,
!(value instanceof Date),
!(value instanceof RegExp),
!(Array.isArray(value) && value.length === 0),
].every(Boolean);
return isObject
? { ...acc, ...flatten(value, newPath, separator) }
: { ...acc, [newPath]: value };
}, {});
}
/**
*
*/
function myFunction() {
const response = {
result: {
items: [
{
product_id: 253611,
offer_id: 'УТ-00007992',
stock: {
coming: 0,
present: 100,
reserved: 23,
},
},
{
product_id: 253616,
offer_id: 'УТ-00007043',
stock: {
coming: 0,
present: 23231,
reserved: 1,
},
},
],
total: 20,
},
};
const arr = response['result']['items'];
const data = [];
arr.forEach((el) => data.push(Object.values(flatten(el))));
SpreadsheetApp.getActive()
.getSheetByName('имя')
.getRange(1, 1, data.length, data[0].length)
.setValues(data);
}
SpreadsheetApp.flush()
. Этот метод останавливает все расчеты и пересчитывает все, что находится у вас в Таблице. Вероятно, из-за него у вас и проблемы.Всё выделяется сразу. Теперь видно с каким диапазоном работаю. Намного более понятно что попадает в значения диапазона.
=ARRAYFORMULA(IFERROR(VLOOKUP(
A2:A&C2:C;
{
UNIQUE(A2:A&C2:C)\
REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
IF(TRANSPOSE(UNIQUE(A2:A&C2:C))=A2:A&C2:C;B2:B & ", ";"");;ROWS(A2:A))
));"(\s*,)+$";"")
};
2;
);""))
/**
*
*/
const SETTINGS = Object.freeze({
fns: [
'danon',
'mars',
'curren1',
'curren2',
'vilma',
'seitek',
'radost',
'rolls',
'lysse',
],
});
/**
*
*/
function addTriggers() {
ScriptApp.getProjectTriggers().forEach((trigger) => {
if (
trigger.getEventType() === ScriptApp.EventType.CLOCK &&
SETTINGS.fns.includes(trigger.getHandlerFunction())
) {
ScriptApp.deleteTrigger(trigger);
}
});
SETTINGS.fns.forEach((fn) =>
ScriptApp.newTrigger(fn).timeBased().everyHours(6).create()
);
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
<style>
Тут код вашего BS
</style>
<script>
Тут код вашей JQ
</script>
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<?!= include('bs'); ?>
</head>
<body>
<h1>Welcome</h1>
<p>Please enjoy this helpful script.</p>
<?!= include('jq'); ?>
</body>
</html>
function showSidebar() {
var htmlTemplate = HtmlService
.createTemplateFromFile('client');
SpreadsheetApp.getUi().showSidebar(htmlTemplate.evaluate()
.setTitle('Цвет текста в ячейке поменялся'));
}
/**
*
*/
function runOnce() {
trigger_();
}
/**
*
*/
function trigger_() {
try {
triggerAction();
} catch (error) {
console.error(error.message, error);
} finally {
var hours = 10;
var minutes = 17;
var seconds = 56;
var now = new Date();
var nextTime = new Date();
nextTime.setHours(0, 0, 24 * 3600 + hours * 3600 + minutes * 60 + seconds);
var delta = nextTime.getTime() - now.getTime();
ScriptApp.newTrigger('trigger_')
.timeBased()
.after(delta)
.create();
}
}
/**
*
*/
function triggerAction() {
console.log("I'm fine");
}
triggerAction
- это то, что выполняет ваш скриптrunOnce
- это то, что вы должны запустить один раз при первом запуске вашего триггера. Другие настройки не требуютсяtrigger_
- это и триггер и конфигурация вашего триггера/**
* Get currencies by a date
*/
function run() {
const httpResponse = UrlFetchApp.fetch(
'https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt?date=20.05.2020'
);
const data = Utilities.newBlob(httpResponse.getContent(), 'plain/text')
.getDataAsString()
.split('\n')
.map((line) => line.split('|'))
.slice(1);
console.log(data);
/*
// Paste to a sheet
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
*/
}