=ARRAYFORMULA(
REGEXREPLACE(
TRANSPOSE(QUERY(TRANSPOSE(D1:G&"|"),,COLUMNS(D1:G))),
"(\|\s*)+",
", " )
)
={"В строку";ARRAYFORMULA(REGEXREPLACE(
REGEXREPLACE(
TRIM(TRANSPOSE(QUERY(TRANSPOSE(D2:G&"|");;COLUMNS(D2:G))));
"(\|\s*)+";
", " );
"(^,\s*)|(,\s*$)";
""
))}
const goToWrapper_ = (address) => {
const range = getRangeByRefString_(SpreadsheetApp.getActiveSheet(), address);
range.getSheet().getRange('A1').activate();
range.activate();
}
function getRangeByRefString_(sheet, refString) {
return refString.indexOf('!') === -1 ?
sheet.getRange(refString) :
sheet.getParent().getRange(refString);
}
function goTo555() {
goToWrapper_('A555');
}
function goToSheet5A555() {
goToWrapper_('Sheet5!A555');
}
B1
формулу=INDEX('Ответы на форму!A:A')
B2:B
удалите!VLOOKUP
A3:A
- первая таблица,C3:F
- вторая таблица,IMPORTRANGE
для переноса данных в общее место)=INDEX(IFERROR(VLOOKUP(
A3:A;
C3:F;
{1\2\3\4};
)))
=FILTER({C5:C20\A5:B20};C5:C20=1;B5:B20<>"")
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
const allowRanges = [
{ sheetName: 'Заглавная буква', cells: ['B2', 'B3', 'B4'] },
{ sheetName: 'Стартовая страница', cells: ['B2', 'C2', 'D2'] },
]; // Список
const sheetNames = allowRanges.map(r => r.sheetName);
if (e && e.range) {
const sheet = e.range.getSheet();
if (
sheetNames.indexOf(sheet.getName()) > -1 &&
allowRanges.find(r => r.sheetName === sheet.getName()).cells.indexOf(e.range.getA1Notation()) > -1
) {
const value = '' + e.range.getValue();
e.range.setValue(value.slice(0, 1).toLocaleUpperCase() + value.slice(1).toLocaleLowerCase());
}
}
}
Не работает для группы ячеек
=REGEXEXTRACT("" & B8;"(\d\d)(\d\d)(\d\d)(\d\d)")
=IF(--C8>22;REGEXEXTRACT(C8;"(\d)(\d)"); C8)
=INDEX(SORTN(TRANSPOSE({
IF({B19:L19\B28:L28}="";"";--{B19:L19\B28:L28});
TRIM(QUERY(
IF("" & TRANSPOSE({B19:L19\B28:L28})="" & {B19:L19\B28:L28};IF({B19:L19\B28:L28}="";"";--{B19:L19\B28:L28}););
;
9^9))
});9^9;2;1;1);;2)
/**
*
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
function onEdit(e) {
const sheetName = 'Sheet6'; // Имя листа, который можно использовать
if (e && e.range) {
const sheet = e.range.getSheet();
if (sheet.getName() === sheetName)
sheet.getRange('A1').setValue(Math.random());
}
}
VLOOKUP
=INDEX(IFERROR(VLOOKUP(A:A;'Данные'!A:B;2;)))
const getUrl = (id, range, key) =>
`https://sheets.googleapis.com/v4/spreadsheets/${id}/values/${range}?key=${key}`;
const arrToCollect = (array) =>
array
.slice(1)
.map(
(_, ri) =>
array[0].reduce((ah, h, ci) => ((ah[h] = array[ri + 1][ci]), ah), {}),
[]
);
(async () => {
const id = '1xTXNtfabGIiFR9PdOQonmnlSPbhGcj_2Geo1v0cq4Gw';
const range = 'Sheet';
// Limited to the use of the contributor.pw/* domain
const key = 'AIzaSyCt4F7Z8cVDqivNcO3slXewThZurJ4gJNY';
let res = {};
try {
res = await fetch(getUrl(id, range, key));
const data = JSON.parse(await res.text());
console.log(data.values);
console.log(arrToCollect(data.values));
} catch (err) {
console.error(err);
}
})();
getUrl
- функция для формирования адреса запроса к API.arrToCollect
- функция преобразования двухмерного массива в массив объектов. Я ее просто копирую, поэтому она такая плотная. Подробно https://github.com/contributorpw/google-apps-scrip... К сожалению, из-за блокировки я не могу прислать вам прямую ссылку на сайт. См. (если не лень) https://apps-script-snippets.contributor(dot)pw/snippets/common_js/2darray_to_collection/=FILTER('Лист1'!F:F;ISNA(MATCH('Лист1'!F:F;'Лист1'!K:K;0)))
function onEdit(e) {
Logger.log(e);
Logger.log(e.value);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetS = ss.getSheets()[2];
var sheetD = ss.getSheets()[3];
var lastColumn = sheetS.getLastColumn();
var lastRow = sheetD.getLastRow();
if (e.range.getColumn() == 23 && e.value == 1) {
var range = e.range;
var row = range.getRow();
Logger.log(row);
var val = sheetS.getRange(row, 1, 1, lastColumn).getValues();
sheetD.getRange(lastRow + 1, 1, 1, lastColumn).setValues(val);
sheetS.deleteRow(row);
}
}
if (e.range.getColumn() == 23 && e.value == 1) {
ARRAYFORMULA
или INDEX
.=ARRAYFORMULA(IF(A1:A<>0;"Done";))
function REMOVESUBSTRDUPLICATES(string) {
var patt = /(.+)\1+/g;
var res = string;
var acc;
while (acc !== res) {
acc = res;
res = res.replace(/(.+)\1+/g, '$1');
}
return res;
}
$A2:$E89
. Это позволит закрашивать построчно. А в настройках проверки укажите "Пользовательская формула" и =$E:$E=TRUE
.=INDEX(
IFS(
B2:B8<=6,"0 ... 6",
B2:B8<=8,"7 ... 8",
B2:B8<=10,"9 ... 10"
)
)
={
UNIQUE(C2:C8),
INDEX(
COUNTIFS(C2:C8,UNIQUE(C2:C8))/
COUNTA(C2:C8)
)
}