Что portable версия программы может узнать о системе?
=OR($F$1="";A2=$F$1)
function onEdit(e) {
sheet = e.range.getSheet();
if (sheet.getName() == "Здесь должно быть имя страницы" && e.range.getA1Notation() == "F1") {
let filter = sheet.getFilter();
let filterCriteria = filter.getColumnFilterCriteria(1).copy().build();
filter.setColumnFilterCriteria(1, filterCriteria);
}
}
=ArrayFormula(QUERY(A1:E4;"where Col1 = 'Иран' and "&
TEXTJOIN(" and ";;"Col"&
SEQUENCE(1;COLUMNS(A1:E4))&" is not null")))
=FILTER(A1:E4; A1:A4="Иран"; byrow(A1:E4; LAMBDA(row; AND(row<>""))))
=SUMPRODUCT($A2&$B2=$A3:A23&$B3:B23)
=$A$2&$B$2=$A3&$B3
function myFunction() {
Logger.log('1')
}
function createTimeDrivenTriggers() {
ScriptApp.newTrigger('myFunction')
.timeBased()
.everyMinutes(1)
.create();
}
// range.setValues(arr);
arr.forEach(
(val,idx) => {
if (val!=='') range.getCell(1, idx+1).setValue(val)
}
);
class Recalculator {
constructor(calcs) {
this.calcs = calcs;
}
calc(params, fix) {
if (params.filter((p) => p === '' || isNaN(p)).length > 1)
return params.map((p) => (isNaN(p) || p === '' ? '' : Number(p)));
const index = params.map((p) => (isNaN(p) || p === '' ? '' : Number(p))).findIndex((p) => p === '');
if (index === -1) return params.map((v, i) => (i === fix ? v : ''));
const res = this.calcs[index](params);
const out = [...params];
out[index] = Number.isInteger(res) ? res : Number(res).toFixed(2);
return out;
}
}
const recalc = new Recalculator([([_, b, c]) => c - b, ([a, _, c]) => c - a, ([a, b, _]) => a + b]);
const range = sheet.getRange('B3:F3');
const [a, _, b, __, c] = range.getValues()[0];
const params = [a, b, c];
const [a1, b1, c1] = recalc.calc(params, fix);
range.setValues([[a1, _, b1, __, c1]]);
/**
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
if (
e.range.getSheet().getName() === 'Sheet1' &&
e.range.getA1Notation() === 'M2'
)
CopyList();
}
/**
*
*/
function CopyList() {
var sss = SpreadsheetApp.openById('ID-ТАБЛИЦЫ1');
var ss = sss.getSheetByName('Sheet1');
var from = ss;
var fromValues = from.getDataRange().getValues();
var fromData = fromValues;
var tss = SpreadsheetApp.openById('ID-ТАБЛИЦЫ2');
var ts = tss.getSheetByName('Sheet2');
ts.getRange(
ts.getLastRow() + 1,
1,
fromData.length,
fromData[0].length
).setValues(fromData);
}
onEdit
из другой функции или из редактора.TypeError: Cannot read property 'range' of undefined (строка 3, файл se)
se
в 3й строке
есть некоторая переменная со значением undefined
, свойство range
которой прочитать невозможно. Тут все очевидно - у undefined
нет свойств.e
. И мы ее получаем в системную функцию onEdit
. Это означает, что система сама передает контекст в эту функцию./**
* Тестирование триггера для события EDIT
*/
function runOnEdit() {
var source = SpreadsheetApp.getActive();
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);
}
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
// Работает простой триггер
}
function run() {
const book = SpreadsheetApp.getActive();
const data = book.getSheetByName('dataBase').getRange('A:A').getValues();
const main = book.getSheetByName('main');
['E9:E13', 'J9:J13', 'E23:E27', 'J23:J27'].forEach(addr => {
console.log(addr);
const range = main.getRange(addr);
range.setValues(data.splice(0, range.getNumRows()));
});
}
wsl$
.const combinations = (arr, num) => {
const result = [];
const comb = (arr, n, idx, cur) => {
for (let i = idx; i <= arr.length - n; i += 1) {
cur.push(arr[i]);
if (n === 1) {
result.push([...cur]);
} else {
comb(arr, n - 1, i + 1, cur);
}
cur.pop();
}
};
comb(arr, num, 0, []);
return result;
}
console.log(combinations([1, 2, 3, 4], 3));
// Array(4) [ (3) […], (3) […], (3) […], (3) […] ]
// 0: Array(3) [ 1, 2, 3 ]
// 1: Array(3) [ 1, 2, 4 ]
// 2: Array(3) [ 1, 3, 4 ]
// 3: Array(3) [ 2, 3, 4 ]
// length: 4
const a = [1,2,2,3,34,54,3,4,45,34,53,45,4,1,23,12,3,235,2,5,1,2,6,76,54,6,84,5,23,2,34,6,735];
let outData = [];
const n = 5; // Ширина блока
for(let offset=0; offset<n; offset++){
for(let i=offset; i<a.length; i+=n){
outData.push(a[i]);
};
};
Logger.log(JSON.stringify(outData));
//Проверка на то, что все элементы исходного массива включены
Logger.log(JSON.stringify(outData.sort()));
Logger.log(JSON.stringify(a.sort()));