# Week 10(11/13):Data Tables
## HTML Table
語法介紹:
`<tr></tr> //同一行的內容`
`<th></th> //表格的標題項目`
`<tb></tb> //指表格的一個項目`
範例程式碼:
```html=
<table id="myTable" class="display">
<thead> <!--標題-->
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody> <!--內容-->
<tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>
```
更多詳細介紹:https://www.w3schools.com/html/html_tables.asp
## Data Tables
data tables算是html table的進階版。
範例程式碼:
```html=
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" integrity="sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<!-- 利用DataTable呈現表格 https://datatables.net/manual/installation -->
<!-- cdn(使用套件所需添加的code) -->
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.css" />
<script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.js"></script>
<!-- 利用Google Visualization讀取Google Sheet https://www.labnol.org/code/google-sheet-d3js-visualization-200608 -->
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
// https://developers.google.com/chart/interactive/docs/quick_start
// Load the Visualization API and the corechart package.
google.charts.load('current', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.charts.setOnLoadCallback(init);
function init() {
// 這個例子使用的試算表是 https://docs.google.com/spreadsheets/d/14O1tvCnp4FozwHnRjwp_e-NQCIYZ2xK6i6jZt8K0cCc/copy
// 將上述試算表另存副本後,你要在自己的雲端硬碟將該試算表設定成[知道連結的使用者都能查看]。
// 然後讓程式讀取 https://docs.google.com/spreadsheets/d/瀏覽器網址列上的網址擷取序號部分/gviz/tq?sheet=工作表名稱
// 也就是將下列的 14O1tvCnp4FozwHnRjwp_e-NQCIYZ2xK6i6jZt8K0cCc 更換成自己的檔案序號,以及最後部分指讀取哪個工作表。
var url='https://docs.google.com/spreadsheets/d/14O1tvCnp4FozwHnRjwp_e-NQCIYZ2xK6i6jZt8K0cCc/gviz/tq?headers=0&sheet=最新消息';
var query = new google.visualization.Query(url);
query.setQuery('select *');
query.send(processSheetsData);
}
function processSheetsData(response) {
var data = response.getDataTable();
var columns = data.getNumberOfColumns();
var rows = data.getNumberOfRows();
// 表格以DataTable呈現設定class="display order-column"
var str = `<table id="myTable" class="display order-column">
<thead>
<tr>`;
// 此迴圈取得試算表第一列的各欄位標題加以安排呈現
for (var c=0 ; c<columns ; c++) {
if (data.getFormattedValue(0,c)=='') columns=c; //可能試算表後面有多欄空白,就要將columns數值訂為到此為止
else if (data.getFormattedValue(0,c)!='*')
str += '<th>' + data.getFormattedValue(0,c) + '</th>';
}
// 後續的Tag...........
str += ` </tr>
</thead>
<tbody>`;
// 此迴圈取得試算表第二列起的資料逐一安排呈現
for (var r=1 ; r<rows ; r++) {
str += '<tr>';
// 此迴圈取得試算表第r列的各欄位內容加以安排呈現
for (c=0 ; c<columns ; c++) {
if (data.getFormattedValue(0,c)=='*') { // 該欄第一列標題為*就是下一欄的超連結網址
if (data.getFormattedValue(r,c)!="") {
str += '<td><a href="' + data.getFormattedValue(r,c) + '" target="_blank">' + data.getFormattedValue(r,c+1) + '</a></td>';
c++;
}
}
else
str += '<td>' + data.getFormattedValue(r,c) + '</td>';
}
// 後續的Tag...
}
str += '</tbody></table>';
document.getElementById("demo").innerHTML = str;
// 利用DataTable呈現表格 https://datatables.net/manual/installation
// initial data table(只要會動的東西都要initial)
$(document).ready( function () { //等html全載入後,執行function
$('#myTable').DataTable({ //$('#myTable')==document.getElementById(mytable)
// Language Plug-in for Chinese-traditional https://datatables.net/plug-ins/i18n/Chinese-traditional.html
language: {url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/zh-HANT.json'}, //設定語言,default: English
// Disable ordering in the table https://datatables.net/reference/option/ordering
// ordering: false
// The order parameter https://datatables.net/examples/basic_init/table_sorting.html
order: [[0, 'desc']]
});
});
}
</script>
</head>
<body>
<div id="demo"></div>
</body>
</html>
```
更多範例:
https://jsbin.com/zahovuvile/edit?html,output
https://jsbin.com/widozifeti/edit?html,output
更多詳細資訊:
https://datatables.net/manual/installation