Skip to content

Instantly share code, notes, and snippets.

@MagicWinnie
Created June 7, 2021 17:02
Show Gist options
  • Save MagicWinnie/49375a37aed5edf065361c0969e4ddf0 to your computer and use it in GitHub Desktop.
Save MagicWinnie/49375a37aed5edf065361c0969e4ddf0 to your computer and use it in GitHub Desktop.
Creating a chart using data from several sheets
function delAllChartsFromSheet(name)
{
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName(name);
var chts = sh.getCharts();
for (var i = 0; i < chts.length; i++)
{
sh.removeChart(chts[i]);
}
}
function addArrayToSheetColumn(sheet, column, row, values)
{
const range = [column, row, ":", column, (parseInt(row) + values.length - 1).toString()].join("");
const fn = function(v) {
return [ v ];
};
sheet.getRange(range).setValues(values.map(fn));
return range;
}
function myFunction()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Главная');
delAllChartsFromSheet("Главная");
var sheetNames = [];
var data = [];
var max = -100000, min = 100000, mean = 0, cnt = 0;
var maxMonth = null, minMonth = null;
var spreadSheetsInA = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i = 0; i < spreadSheetsInA.length; i++)
{
if ((spreadSheetsInA[i].getName() != 'Главная') && (spreadSheetsInA[i].getName() != 'Шаблон 30 дней') && (spreadSheetsInA[i].getName() != 'Шаблон 31 день'))
{
var tempSheetName = spreadSheetsInA[i].getName();
var tempSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(tempSheetName);
sheetNames.push(tempSheetName);
data.push(tempSheet.getRange('B11').getValue());
mean += tempSheet.getRange('B11').getValue();
if (tempSheet.getRange('B11').getValue() > max)
{
max = tempSheet.getRange('B11').getValue();
maxMonth = tempSheetName;
}
if (tempSheet.getRange('B11').getValue() < min)
{
min = tempSheet.getRange('B11').getValue();
minMonth = tempSheetName;
}
cnt++;
}
}
var start = "100"; // starting row for temp data
addArrayToSheetColumn(sheet, "A", start, sheetNames);
addArrayToSheetColumn(sheet, "B", start, data);
var chart = sheet.newChart()
.setChartType(Charts.ChartType.LINE)
.setPosition(6, 2, 0, 0)
.setOption('title', 'Траты')
.setOption('vAxis', {'title': 'Рубли'})
.setOption('hAxis', {'title': 'Месяцы'})
.addRange(sheet.getRange(["A", start, ":", "B", (parseInt(start) + data.length - 1).toString()].join("")))
.build();
sheet.insertChart(chart);
sheet.getRange("B2").setValue([max]);
sheet.getRange("B3").setValue([min]);
sheet.getRange("B4").setValue([mean / cnt]);
sheet.getRange("C2").setValue([maxMonth]);
sheet.getRange("C3").setValue([minMonth]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment