使用谷歌应用程序脚本在谷歌网站中嵌入谷歌表格

问题描述 投票:0回答:1

我目前正在将我的价值观从我的谷歌工作表整合到我的谷歌网站中。我知道,只需将谷歌表格框放入网站中也可以做到这一点,但我想通过使用谷歌应用程序脚本来改进样式。我得到以下代码:

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <script>
        function submitForm() {
            const name = document.getElementById('name').value;
            const message = document.getElementById('message').value;

            google.script.run.withSuccessHandler(function() {
                document.getElementById('name').value = '';
                document.getElementById('message').value = '';
                displayMessages(); // Refresh the message list after submission
            }).withFailureHandler(function(error) {
                alert("Error submitting message: " + error.message);
            }).submitMessage(name, message);
        }

        function displayMessages() {
            google.script.run.withSuccessHandler(renderMessages).getMessages(); // Calling getMessages
        }

        function renderMessages(data) {
            const dataList = document.getElementById('dataList');
            dataList.innerHTML = ''; // Clear previous data

            // Handle null or unexpected data format
            if (!data || !Array.isArray(data) || data.length === 0) {
                const listItem = document.createElement('li');
                listItem.textContent = "No messages available.";
                dataList.appendChild(listItem);
                return;
            }

            // Process each row of data
            data.forEach(function(row) {
                // Ensure the row is an array and has the expected length
                if (Array.isArray(row) && row.length === 3) {
                    const listItem = document.createElement('li');
                    
                    // Format the timestamp using toLocaleString
                    const formattedDate = new Date(row[0]).toLocaleString(); // Format the date
                    listItem.textContent = `${formattedDate} - ${row[1] || 'Anonymous'}: ${row[2] || 'No message'}`; // Format the message display
                    dataList.appendChild(listItem);
                } else {
                    console.error("Unexpected row format:", row); // Log unexpected row formats
                }
            });
        }

        window.onload = function() {
            displayMessages(); // Load messages when the page is opened
        };
    </script>
</head>
<body>
    <h1>Message Board</h1>
    <form onsubmit="submitForm(); return false;">
        <label for="name">Name:</label>
        <input type="text" id="name" required>
        <br>
        <label for="message">Message:</label>
        <textarea id="message" required></textarea>
        <br>
        <input type="submit" value="Submit">
    </form>
    <h2>Messages:</h2>
    <ul id="dataList"></ul>
</body>
</html>

以及以下谷歌应用程序脚本:

function doGet() {
  return HtmlService.createHtmlOutputFromFile('index');
}

function submitMessage(name, message) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const timestamp = new Date();
  sheet.appendRow([timestamp, name, message]);
}

function getMessages() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // Log the raw data retrieved from the sheet
  Logger.log("Raw data from sheet: " + JSON.stringify(data));

  if (data.length < 1) {
    // If there's no data (only header), return an empty array
    return [];
  }

  // Remove the header row
  data.shift(); 

  // Log the data after removing the header
  Logger.log("Data after removing header: " + JSON.stringify(data));
  Logger.log(data);

  return data;
}

我认为 code.gs 工作正常,因为输出对应于我的谷歌工作表的值。所以我的问题是,关于该问题的错误在哪里,该网站不显示该网站的值,但输入工作绝对正常。

亲切的问候。

我尝试在浏览器控制台中多次调整 html,发现错误发生在 forEach 处,因为数据为 Null,但 code.gs 返回了包含正确值的列表。

javascript google-sheets google-sites
1个回答
0
投票

我认为渲染消息功能已关闭。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.