Apps Script用Sheet生成動態網頁(2): 動態生成網頁連結列表
在第一篇中我們完成了只要改sheet的內容就會動態改變網頁的內容。但是首頁的內容卻是寫死的。所以這篇就在依照上一篇的程式碼做修改,讓首頁的列表自動變更。
原本首頁我們寫在doGet函數中,現在我們改成直接從sheet內讀取資料來列表
首頁的內容變成
output = HtmlService.createTemplate(`<!DOCTYPE html>
<html>
<head><base target="_top"></head>
<body>
<h1>用Sheet內容生成網頁</h1>
<? let BASE_URL = getServerUrl(); ?>
<? let name_list = getNameListFromSheet(); ?>
<ul>
<?
for (let i = 0 ; i < name_list.length ; ++i ) {
if (null != name_list[i][0]) {
let name = name_list[i][0];
let url = BASE_URL + '?getHtml=' + name;
?>
<li><a href="<?= url ?>">前往<?= name ?></a></li>
<?
}
}
?>
</ul>
</body>
</html>`).evaluate();
本次的重點就是我們使用getNameListFromSheet()函數,從sheet內讀取已有的網頁名稱
function getNameListFromSheet() {
const validator = row => row && row[0] != null && row[0].length > 0;
try {
let sheet = SpreadsheetApp.openByUrl(SHEET_URL).getSheets()[0];
return sheet.getRange(1, 1 + COLUMN_IDX_OF_NAME, 1 + sheet.getLastRow(), 1).getValues()
.filter(validator);
} catch (error) {
Logger.log('getNameListFromSheet error:' + error.stack || error);
}
return [[]];
}
這個函數使用filter函數,藉由validator函數來過濾不是null或沒有命名的網頁,然後再首頁中透過AppsScript提供的<? ?>前處理將過濾的資料設定成列表項目,並生成對應的網頁連結。
留言