JSFiddle - React, Tailwind, and code Playground

HTML

<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="utf-8" />
  <title>V2 - 讀取 Google Sheet(gviz/tq)</title>
  <script src="https://www.gstatic.com/charts/loader.js"></script>
</head>
<body>
  <h2>Version 2 — 讀取 Google Sheet(只讀)</h2>
  <div id="demo">讀取中...</div>

  <script>
    // 請替換成你的試算表 ID 與工作表名稱
	var SHEET_ID = "1QScI5d56Kh-LGywY4WR6EvRGPcalFQYUAdqMxbFVDvk";
    var SHEET_NAME = "工作表1"; // 或你自己的工作表名稱

    google.charts.load('current', { packages: ['corechart'] });
    google.charts.setOnLoadCallback(init);

    function init() {
      var url = 'https://docs.google.com/spreadsheets/d/' + SHEET_ID + '/gviz/tq?sheet=' + encodeURIComponent(SHEET_NAME);
      var query = new google.visualization.Query(url);
      query.setQuery('select *');
      query.send(processData);
    }

    function processData(response) {
      if (response.isError()) {
        document.getElementById('demo').innerText = '讀取失敗:' + response.getMessage();
        return;
      }

      var data = response.getDataTable();
      var rows = data.getNumberOfRows();
      var cols = data.getNumberOfColumns();

      var html = "<strong>讀到 " + rows + " 筆資料(顯示前 100 筆)</strong><br><br>";
      for (var r = 0; r < rows && r < 100; r++) {
        // 假設欄位順序為:A 客戶名稱, B 商品名稱, C 數量, D 單價, E 日期
        html += data.getFormattedValue(r,0) + " / " +
                data.getFormattedValue(r,1) + " / " +
                data.getFormattedValue(r,2) + " / " +
                data.getFormattedValue(r,3) + " / " +
                (cols > 4 ? data.getFormattedValue(r,4) : "") +
                "<br>";
      }

      document.getElementById('demo').innerHTML = html;
    }
  </script>
</body>
</html>