JSFiddle - React, Tailwind, and code Playground
HTML
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<title>商品列表 Demo(讀取 Google Sheet)</title>
<!-- DaisyUI + Tailwind (CDN 版) -->
<link href="https://cdn.jsdelivr.net/npm/daisyui@4.12.10/dist/full.min.css" rel="stylesheet" />
<script src="https://cdn.tailwindcss.com"></script>
<!-- Google Visualization API -->
<script src="https://www.gstatic.com/charts/loader.js"></script>
</head>
<body class="bg-base-200 p-6">
<h1 class="text-3xl font-bold mb-6 text-center">精選商品列表</h1>
<!-- Cards 容器 -->
<div id="productList" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6"></div>
<script>
google.charts.load('current', { packages: ['corechart'] });
google.charts.setOnLoadCallback(init);
function init() {
// ★★★ 換成你自己的 Google Sheet ID ★★★
var SHEET_ID = "1cB6a4F4soIDf8zOovv47nnYhJs_KESJKrInGyjJT-FQ";
var SHEET_NAME = "工作表1"; // 或你自己的工作表名稱
// 不用 ES6,改用最基本字串串接
var baseUrl =
'https://docs.google.com/spreadsheets/d/' +
SHEET_ID +
'/gviz/tq?sheet=' +
encodeURIComponent(SHEET_NAME);
var query = new google.visualization.Query(baseUrl);
query.setQuery('select *');
query.send(renderProducts);
}
function renderProducts(response) {
var data = response.getDataTable();
var rows = data.getNumberOfRows();
var html = "";
for (var r = 0; r < rows; r++) {
var id = data.getFormattedValue(r, 0);
var name = data.getFormattedValue(r, 1);
var desc = data.getFormattedValue(r, 2);
var price = data.getFormattedValue(r, 3);
var img = data.getFormattedValue(r, 4);
// 同樣不用 `${ }`,手動串接字串
html +=
'<div class="card bg-base-100 shadow-xl">' +
'<figure>' +
'<img src="' + img + '" alt="' + name + '" class="w-full object-cover h-48" />' +
'</figure>' +
...