
Chart.js可以顯示圖表,很方便,如果能連接資料庫就更強大了,這個文章來說明如何將GAS用成資料庫,透過Chart.js來顯示長條圖、線圖以及圓餅圖。
Chart.js官網:https://www.chartjs.org/
範例:
Google Sheets 資料範例:

Code.js code
// 連結index
function doGet() {
var file = HtmlService.createTemplateFromFile('index');
var evaluate = file.evaluate().addMetaTag('viewport', 'width=device-width, initial-scale=1');
var html = evaluate.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return html;
}
// 抓資料 Google Sheets
function getDataFromSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ChartData');
var lastColumn = sheet.getLastColumn();
var headersRange = sheet.getRange(1, 1, 1, lastColumn);
var dataRange = sheet.getRange(2, 1, 1, lastColumn);
var headers = headersRange.getValues()[0];
var data = dataRange.getValues()[0];
var chartData = {
labels: headers,
values: data,
};
return chartData;
}
// 將資料傳給前端
function getChartData() {
var data = getDataFromSheet();
return JSON.stringify(data);
}
index.html
<!DOCTYPE html>
<html>
<head>
//連結chart.js
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<div style="display: flex; justify-content: space-around;">
<div>
<h2>Bar Chart</h2>
<canvas id="barChart" width="400" height="400"></canvas>
</div>
<div>
<h2>Line Chart</h2>
<canvas id="lineChart" width="400" height="400"></canvas>
</div>
<div>
<h2>Pie Chart</h2>
<canvas id="pieChart" width="400" height="400"></canvas>
</div>
</div>
//JS code
<script>
google.script.run.withSuccessHandler(drawCharts).getChartData();
function drawCharts(data) {
var ctxBar = document.getElementById('barChart').getContext('2d');
var ctxLine = document.getElementById('lineChart').getContext('2d');
var ctxPie = document.getElementById('pieChart').getContext('2d');
var chartData = JSON.parse(data);
chartData.barColors = generateColors(chartData.labels.length);
chartData.lineColors = generateColors(chartData.labels.length);
chartData.pieColors = generateColors(chartData.labels.length);
drawBarChart(ctxBar, chartData);
drawLineChart(ctxLine, chartData);
drawPieChart(ctxPie, chartData);
}
//長條圖
function drawBarChart(ctx, chartData) {
var barChart = new Chart(ctx, {
type: 'bar',
data: {
labels: chartData.labels,
datasets: [{
label: 'Data from Google Sheets',
data: chartData.values,
backgroundColor: chartData.barColors,
borderColor: chartData.barColors,
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}
//線圖
function drawLineChart(ctx, chartData) {
var lineChart = new Chart(ctx, {
type: 'line',
data: {
labels: chartData.labels,
datasets: [{
label: 'Data from Google Sheets',
data: chartData.values,
fill: false,
borderColor: chartData.lineColors,
tension: 0.1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}
//圓餅圖
function drawPieChart(ctx, chartData) {
var pieChart = new Chart(ctx, {
type: 'pie',
data: {
labels: chartData.labels,
datasets: [{
label: 'Data from Google Sheets',
data: chartData.values,
backgroundColor: chartData.pieColors,
borderColor: chartData.pieColors,
borderWidth: 1
}]
},
options: {}
});
}
//動態顏色
function generateColors(numColors) {
var colors = [];
var step = 360 / numColors;
for (var i = 0; i < numColors; i++) {
var hue = (step * i) % 360;
var saturation = Math.floor(Math.random() * 50) + 50; // Adjust saturation for contrast
var lightness = Math.floor(Math.random() * 50) + 50; // Adjust lightness for contrast
var color = `hsla(${hue}, ${saturation}%, ${lightness}%, 0.7)`;
colors.push(color);
}
return colors;
}
</script>
</body>
</html>
