x-www-form-urlencoded
. При получении аргумента формы вы должны "преобразовать" его к требуемому формату. В вашем случаеconst payments = JSON.parse(e.parameter.payments);
/**
*
* @param {GoogleAppsScript.Events.DoPost} e
*/
function doPost(e) {
const payments = JSON.parse(e.parameter.payments);
return ContentService.createTextOutput(JSON.stringify(payments.products[0]));
}
doPost
объект нужно сделатьform2Json(e.postData.contents)
/* global form2Json */
/* exported doPost */
/**
*
* @param {GoogleAppsScript.Events.DoPost} e
*/
function doPost(e) {
// const payments = JSON.parse(e.parameter.payments);
return ContentService.createTextOutput(
JSON.stringify(form2Json(e.postData.contents), null, ' ')
);
}
const data = form2Json(contents);
console.log(JSON.stringify(data.payment.products[0]));
IF
https://support.google.com/docs/answer/3093364?hl=ruA1
что-то есть, то нужно B1
умножить на C1
, наче вывести пустую строку=IF(A1<>"";B1*C1;"")
=IF(A1="";"";B1*C1)
это обычная практика для большей читаемости. flush()
SpreadsheetApp.flush();
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
var activeSheet = e.source.getActiveSheet();
SpreadsheetApp.getActive().toast(['Лист'].indexOf(activeSheet.getName()));
if (['Лист'].indexOf(activeSheet.getName()) == -1) return;
var r = SpreadsheetApp.getActiveRange();
var cols = r.getColumn();
if (cols == 6) {
// если изменяем 6 колонку, то тригер работает и:
var cell1 = activeSheet.getRange(2, 2); // во второй колонке берет данные из второй строки (там лежит формула)
var destination1 = activeSheet.getRange(activeSheet.getLastRow(), 2); // находит последнюю строку с данными и выбирает вторую колонку
cell1.copyTo(destination1); // копирует из второй строчки в последнюю
var cell2 = activeSheet.getRange(2, 3); // тоже самое но только для 3 колонки
var destination2 = activeSheet.getRange(activeSheet.getLastRow(), 3); // тоже самое но только для 3 колонки
cell2.copyTo(destination2); // тоже самое но только для 3 колонки
var cell3 = activeSheet.getRange(2, 5); // тоже самое но только для 5 колонки
var destination3 = activeSheet.getRange(activeSheet.getLastRow(), 5); // тоже самое но только для 5 колонки
cell3.copyTo(destination3); // тоже самое но только для 5 колонки
var cell4 = activeSheet.getRange(2, 8); // тоже самое но только для 8 колонки
var destination4 = activeSheet.getRange(activeSheet.getLastRow(), 8); // тоже самое но только для 8 колонки
cell4.copyTo(destination4); // тоже самое но только для 8 колонки
SpreadsheetApp.flush();
destination1.copyTo(
destination1,
SpreadsheetApp.CopyPasteType.PASTE_VALUES,
false
); // во второй колонке меняет формулу на значение
destination2.copyTo(
destination2,
SpreadsheetApp.CopyPasteType.PASTE_VALUES,
false
); // в третьей колонке меняет формулу на значение
destination3.copyTo(
destination3,
SpreadsheetApp.CopyPasteType.PASTE_VALUES,
false
); // в пятой колонке меняет формулу на значение
destination4.copyTo(
destination4,
SpreadsheetApp.CopyPasteType.PASTE_VALUES,
false
); // в восьмой колонке меняет формулу на значение
SpreadsheetApp.getActive().toast('Готово');
}
}
'Лист 1'!B3
:/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
if (!/^Лист 1$/.test(e.range.getSheet().getName())) return;
if (!/^B3$/.test(e.range.getA1Notation())) return;
SpreadsheetApp.getActive().toast('Работаем дальше');
}
V8
, STABLE
, DEPRECATED_ES5
.V8
порядок файлов однозначно не играет роли и даже не все файлы загружаются для исполнения. Поэтому лучше избегать этой условности.STABLE
, DEPRECATED_ES5
порядок обычно зависит от алфавитного расположения файлов, но это негарантировано.код.gs
и код2.gs
. В обоих есть функция onOpen
. При загрузке текста программы в исполнительную среду одна функция перезапишет другую и исполняться на самом деле будет только одна функция, т.к. другой нет и в помине (она перезаписана). Какая функция будет перезаписана, это зависит от среды (см. выше).function onOpen(e){
onOpen1(e);
onOpen2(e);
}
function onOpen1(e){
...
}
function onOpen2(e){
...
}
=TEXT(TODAY();"YYYY")-TEXT(A7;"YYYY")
=VALUE(TEXT(TODAY();"YYYY"))-VALUE(TEXT(A7;"DD"))
=LEN(REGEXREPLACE(TO_TEXT(A10);"[^1-9]";""))
=LEN(REGEXREPLACE(TO_TEXT(A10);"[^0]";""))
=NUMBERTEXT("cardinal-feminine "& LEN(REGEXREPLACE(TO_TEXT(A10);"[^0]";"")))