JSFiddle - React, Tailwind, and code Playground
HTML
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="utf-8" />
<title>V4 - Table + Filter</title>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<style>
#control { margin-bottom: 12px; }
table { border-collapse: collapse; width: 100%; max-width: 900px; }
th, td { border: 1px solid #ccc; padding: 6px; text-align: left; }
</style>
</head>
<body>
<h2>Version 4 — 顯示表格並可搜尋(前端 filter)</h2>
<div id="control">
搜尋客戶名稱: <input id="searchName" placeholder="輸入客戶名稱(含部分字)"/>
<button id="searchBtn">搜尋</button>
<button id="resetBtn">重置</button>
</div>
<div id="demo">讀取中...</div>
<script>
// 請替換成你的試算表 ID 與工作表名稱
var SHEET_ID = "1QScI5d56Kh-LGywY4WR6EvRGPcalFQYUAdqMxbFVDvk";
var SHEET_NAME = "工作表1"; // 或你自己的工作表名稱
var baseUrl = 'https://docs.google.com/spreadsheets/d/' + SHEET_ID + '/gviz/tq?sheet=' + encodeURIComponent(SHEET_NAME);
var lastDataTable = null; // 供前端 filter 使用
google.charts.load('current', { packages: ['corechart'] });
google.charts.setOnLoadCallback(loadAll);
function loadAll() {
var query = new google.visualization.Query(baseUrl);
query.setQuery('select *'); // 讀全部
query.send(storeAndRender);
}
function storeAndRender(response) {
if (response.isError()) {
document.getElementById('demo').innerText = "讀取錯誤:" + response.getMessage();
return;
}
lastDataTable = response.getDataTable();
renderTable(lastDataTable);
}
function renderTable(dataTable, filterName) {
if (!dataTable) { document.getElementById('demo').innerText = "沒有資料"; return; }
var rows = dataTable.getNumberOfRows();
var cols = dataTable.getNumberOfColumns();
var html = "<table><tr>";
for (var c = 0; c < cols; c++) {
html += "<th>" + dataTable.getColumnLabel(c) + "</th>";
}
html += "</tr>";
var matchCount = 0;
...