=FILTER(H:K;MATCH(H:H;A1:A6;0))
{
const sheet2 = sheet.copyTo(ss).setName(sheet2.getResponseText());
sheet2.activate();
ss.moveActiveSheet(1);
}
function muFunction() {
const ui = SpreadsheetApp.getUi();
const book = SpreadsheetApp.getActiveSpreadsheet();
const sheet = book.getSheetByName('Шаблон');
const prompt = ui.prompt('New Sheet Name?');
if (prompt.getResponseText()) {
const copy = sheet.copyTo(book).setName(prompt.getResponseText());
copy.activate();
book.moveActiveSheet(sheet.getIndex());
}
}
book.moveActiveSheet(sheet.getIndex()+1);
=ARRAYFORMULA(IF(A2:A="";;
REGEXMATCH(A2:A;"(" & TEXTJOIN("|";1;D2:D) & ")")
))
=ARRAYFORMULA(
IF(
(A2:A<>"") * REGEXMATCH(A2:A;"(" & TEXTJOIN("|";1;D2:D) & ")");
A2:A;
))
=ARRAYFORMULA(TRANSPOSE(TRIM(QUERY(
IF(IFERROR(FIND(B2:B5;TRANSPOSE(A2:A7));"");B2:B5;);
;
9^9
))))
=FILTER(A1:A5;B1:B5<=2500)
FILTER
https://contributor.pw/post/google-sheets-formulas... function insertImageToCell() {
const image = SpreadsheetApp
.newCellImage()
.setSourceUrl('https://upload.wikimedia.org/wikipedia/commons/5/50/Smile_Image.png')
.build();
SpreadsheetApp.getActiveRange()
.setValue(image);
}
Функция вставки
/**
* Insert a single image to the cell. A1 is default
*
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet
* @param {GoogleAppsScript.Base.Blob} blob
* @param {number} row
* @param {number} column
*/
function insertImageBlobToCell_(sheet, blob, row = 1, column = 1) {
const sheetName = sheet.getName();
const parentId = sheet.getParent().getId();
return DocsServiceApp.openBySpreadsheetId(parentId)
.getSheetByName(sheetName)
.insertImage([{ blob, range: { row, column } }]);
}
Пример вызова
/**
* Insert an image blob to the cell
*/
function userActionRun() {
const sheet = SpreadsheetApp.getActiveSheet();
const blob = UrlFetchApp.fetch(
'https://contributor.pw/img/post/sheets/sheets_mmult-some-uses-cases_01.png'
).getBlob();
insertImageBlobToCell_(sheet, blob);
}
Результат
Не забудьте добавить библиотекув свой проект. Пример манифеста в сниппете108j6x_ZX544wEhGkgddFYM6Ie09edDqXaFwnW3RVFQCLHw_mEueqUHTW
="Итого с учетом всего : " & TEXT(D8;"#,##0.00") & REGEXREPLACE(
MONEYTEXT(D8;"RUB") & " ноль копеек ";
"(.*)\s(руб[а-я]+)(.*?)(коп[а-я]+)(.*)";
" ($1) $2 " & TEXT(ROUND(MOD(D8;1);2)*100;"00") & " $4"
)
Замечание. Представление текста валют обусловлено общим форматом интерпретатора и видением группы разработчиков и не поддерживает никаких банковских или других стандартов. Основная причина - отсутствие поддержки в развитии продукта. Времени и сил хватает только на исправление багов.
="Итого с учетом всего : " & D8 & " " & REGEXREPLACE(
MONEYTEXT(D8; "RUB");
"(.*?)\s(руб[а-я]{0,})[\s].*?(коп[а-я]{0,})";
"($1) $2 " & REGEXEXTRACT("" & D8;",(\d{2})") & " $3"
)
=QUERY(range; sql_query; 1)
1
SEARCH
или FIND
могут решить эту задачу=ARRAYFORMULA(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(
IF(
FIND(TRANSPOSE(LOWER('словарь'!B2:B11));LOWER(B2:B11));
TRANSPOSE('словарь'!B2:B11)
)
));;9^9))))
"dd.MM.yyyy"
и "HH:mm:ss"
.const dateTimeStart = sheets.getRange('C1').getValue();
dateTimeEnd
- только вам известно, но в итоге, полученный dateTimeStart
подходит для передачи в качестве значений аргументов в методы CalendarApp
. IFS
характерна линейность, сводящаяся к принципу "кто первый, тот и решение". Т.е., если вы поменяете строки таким образом, то вы получите нужный результатK6 = TRUE, iferror(QUERY(Pricelist!$A:$U,"select U where A like '"&$D5&"'",0),""),
I5 = TRUE, iferror(QUERY(Pricelist!$A:$R,"select R where A like '"&$D5&"'",0),""),
I6 = TRUE, iferror(QUERY(Pricelist!$A:$S,"select S where A like '"&$D5&"'",0),""),
I7 = TRUE, iferror(QUERY(Pricelist!$A:$T,"select T where A like '"&$D5&"'",0),""),
I5 = TRUE
- это 1
I6 = TRUE
- это 2
I7 = TRUE
- это 5
K6 = TRUE
- это 9
1
, то включен только I5
, если 3
- I5
и I6
, если 12
- I5
и I6
и K6
и т.п. Теперь вы можете выбирать решение по вкусу - вы знаете все варианты. =DATE(
REGEXEXTRACT(A1,"(\d{4})"),
SWITCH(REGEXEXTRACT(A1,"\w{3}"),"Jan",0,"Feb",1,"Mar",2,"Apr",3,"May",4,"Jun",5,"Jul",6,"Aug",7,"Sep",8,"Oct",9,"Nov",10,"Dec",11),
REGEXEXTRACT(A1,"(\d{2}),")
)
+
TIME(
IF(REGEXMATCH(A1,"PM"),12,0)+REGEXEXTRACT(A1,"(\d{2}):"),
REGEXEXTRACT(A1,":(\d{2})"),
0
)
=ARRAYFORMULA(
DATE(
REGEXEXTRACT(A1:A12,"(\d{4})"),
SWITCH(REGEXEXTRACT(A1:A12,"\w{3}"),"Jan",0,"Feb",1,"Mar",2,"Apr",3,"May",4,"Jun",5,"Jul",6,"Aug",7,"Sep",8,"Oct",9,"Nov",10,"Dec",11),
REGEXEXTRACT(A1:A12,"(\d{2}),")
)
+
TIME(
IF(REGEXMATCH(A1:A12,"PM"),12,0)+REGEXEXTRACT(A1:A12,"(\d{2}):"),
REGEXEXTRACT(A1:A12,":(\d{2})"),
0
))
SWITCH
- не лучшая идея. Можно заменить на MATCH
=ARRAYFORMULA(
DATE(
REGEXEXTRACT(A2:A100;"(\d{4})");
MATCH(REGEXEXTRACT(A2:A100;"\w{3}");{"Jan";"Feb";"Mar";"Apr";"May";"Jun";"Jul";"Aug";"Sep";"Oct";"Nov";"Dec"};0)-1;
REGEXEXTRACT(A2:A100;"(\d{2}),")
)
+
TIME(
IF(REGEXMATCH(A2:A100;"PM");12;0)+REGEXEXTRACT(A2:A100;"(\d{2}):");
REGEXEXTRACT(A2:A100;":(\d{2})");
0
)
)
/**
*
*/
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('Обновлено');
}
}
}