/**
* Считает средний процент каждого игрока за месяц
* Telegram - @ProgrammerForever
*
* @param {range} data Исходные данные
* @return Средний процент каждого игрока за месяц
*/
function calc(data){
let sums = data[0]
.map((_, col) => data.map(row => row[col]))
.map(c=>c.reduce((a,v)=>a+=v,0));
let fractions = data.map((row,r)=>row.map((v,c)=>v/sums[c]));
return fractions.map(row=>row.reduce((a,v)=>a+=v,0));
};
const targetEmail = ``; // email для отправки
function f(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let blob = ss.getAs(`application/pdf`);
try{
GmailApp.sendEmail(targetEmail, 'backup', 'pdf файл во вложении', {
attachments: [blob],
});
Logger.log(`Письмо отправлено`);
}catch(e){
Logger.log(e);
}
};
x = x0 + R*cos(phi)
y = y0 + R*cos(pi/2 - phi) = y0 + R*sin(phi)
/**
* Возвращает примечание к ячейке
* Telegram - @ProgrammerForever
*
* @param {string} sheetName Имя листа
* @param {string} rangeName Адрес ячейки в текстовом виде
* @return Возвращает примечание к ячейке
* @customfunction
*/
function getNotes(sheetName, rangeName){
return SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName).getRange(rangeName).getNotes()
}
=getNotes("Лист1";"A10")
=getNotes("Лист1";"A10:B15")
Public Function getShortName(strText As Variant) As String
Dim myRegExp As New RegExp
Dim matches As MatchCollection
myRegExp.Global = True
myRegExp.IgnoreCase = True
myRegExp.Pattern = "(\S+)\s+(\S)\S*\s+(\S)\S*"
Set matches = myRegExp.Execute(strText)
getShortName = matches(0).SubMatches(0) & " " & matches(0).SubMatches(1) & "." & matches(0).SubMatches(2) & "."
End Function
Function getShortName(strText As String) As String
Dim a
a = Split(strText, " ")
getShortName = a(0) & " " & Left(a(1), 1) & "." & Left(a(2), 1) & "."
End Function
sin(x) = x - x³/(3!) + x⁵/(5!) - x⁷/(7!) + x⁹/(9!) - ...
3й - 10000*0,9 =9000 (разряд 3го)
2й - 10000*0,9*0,9*0,9 = 7290 (разряд 2го, заряд 3го, разряд 3го)
1й - 10000*0,9*0,9*0,9*0,9*0,9 = 5904,9 (разряд 1го, заряд 2го, разряд 2го, заряд 3го, разряд 3го)
=REGEXEXTRACT( join("|";IMPORTXML("https://shikimori.one/animes/40935-beastars";"//*[@id='animes_show']/section/div[1]/div[2]/div/div/div[1]/div[1]/div[2]/div/div[2]/div[1]/div[2]/div/div[2]//text()"));"0?(.*?)\|.*")
ws.getRange(2, 1, 1000, ws.getLastColumn()).clearFormat();
//...
"sheets": {
"macros": [{
"menuName": "macros1",
"functionName": "myFunction",
"defaultShortcut": "Ctrl+Shift+Alt+1"
}]
}
//...
function onSelectionChange() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let as = ss.getActiveSheet();
let ac = as.getActiveCell();
let row = ac.getRow();
as.getRange(row+":"+row).setBackground("yellow");
}
=arrayformula({'Лист2'!1:1000;'Лист3'!1:1000})
function onChange() {
const targetSheetName = "Лист1"; // Сюда вставляем значения
const targetSheetRange = "A1"; // Сюда вставляем значения
const dataRange = "1:1000"; // Диапазон данных извлекаемых из каждого листа
let as = SpreadsheetApp.getActiveSpreadsheet();
let sheets = as.getSheets();
let outFormula = "=arrayformula({";
let sheetNames = sheets
.map(sheet=>sheet.getName())
.filter(sheetName=>sheetName!=targetSheetName)
.map(sheetName=>"'"+sheetName+"'!"+dataRange)
.join(";");
outFormula+=sheetNames;
outFormula+="})";
as.getSheetByName(targetSheetName).getRange(targetSheetRange).setFormula(outFormula);
}