使用 SpreadSheet 的值在 Web 应用程序中创建日历

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

我想在我的网络应用程序中使用完整日历库的特定工作表的值创建日历。

如果我在 JavaScript 函数中手动添加值,我可以获得结果。但我不知道什么可以与Sheet的值建立链接。

你能帮我吗?

代码.gs:

  const classeur = SpreadsheetApp.getActiveSpreadsheet();
  const fBDD = classeur.getSheetByName("BDD");

  function doGet() {
    return HtmlService.createTemplateFromFile("Index").evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  }

  function include(filename){
    return HtmlService.createHtmlOutputFromFile(filename).getContent();
  }

索引.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <?!= include('JavaScript'); ?>
    <?!= include('CSS'); ?>
  </head>
  <body>
    <div id='calendar'></div>
  </body>
  <script>
    document.addEventListener("DOMContentLoaded",loadCalendar);
  </script>
</html>

JavaScript.html:

<script src='https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js'></script>

<script>
  function loadView(options){
    var id = typeof options.id === "undefined" ? "app" : options.id;
    var cb = typeof options.callback === "undefined" ? function(){} : options.callback;
  }
  function loadCalendar(){
    loadView({func: "loadSearchView", callback: showCalendar()});
  }

  function showCalendar() {
    var calendarEl = document.getElementById('calendar');
    var calendar = new FullCalendar.Calendar(calendarEl, {
      initialView: 'dayGridMonth',
      initialDate: new Date(),
      headerToolbar: {
        left: 'prev,next today',
        center: 'title',
        right: 'dayGridMonth,timeGridWeek,timeGridDay'
      },
      events: [
        {
          title: 'Event 1',
          start: '2024-11-02T09:00:00',
          end: '2024-11-02T13:00:00'
        },
        {
          title: 'Event 2',
          start: '2024-11-09T08:45:00',
          end: '2024-11-09T12:45:00'
        },
        {
          title: 'Event 3',
          start: '2024-11-09T10:00:00',
          end: '2024-11-09T12:00:00'
        },
        {
          title: 'Event 4',
          start: '2024-11-11T13:45:00',
          end: '2024-11-12T15:00:00'
        }
      ]
    });
    calendar.render();
  }
</script>
google-apps-script web-applications fullcalendar
1个回答
0
投票

虽然我不确定是否能正确理解你的预期结果,但是下面的修改怎么样?

Google Apps 脚本:
Code.gs

请添加以下功能。

function getValues() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("BDD");
  const timeZone = Session.getScriptTimeZone(); // or ss.getSpreadsheetTimeZone()
  const ar = sheet.getRange("A2:C" + sheet.getLastRow()).getValues().map(([a, b, c]) => ({ title: a, start: Utilities.formatDate(b, timeZone, "yyyy-MM-dd\'T\'HH:mm:ss"), end: Utilities.formatDate(c, timeZone, "yyyy-MM-dd\'T\'HH:mm:ss") }));
  return ar;
}

Javascript:
JavaScript.html

请将函数

showCalendar
修改如下。

function showCalendar() {
  google.script.run.withSuccessHandler(events => {
    var calendarEl = document.getElementById('calendar');
    var calendar = new FullCalendar.Calendar(calendarEl, {
      initialView: 'dayGridMonth',
      initialDate: new Date(),
      headerToolbar: {
        left: 'prev,next today',
        center: 'title',
        right: 'dayGridMonth,timeGridWeek,timeGridDay'
      },
      events
    });
    calendar.render();
  }).getValues();
}
  • 在此修改中,当加载日历时,从电子表格检索值,并将检索到的值转换为日历的事件数据,并将事件数据发送到Javascript。并且,事件数据与日历一起使用。
  • 为了将事件数据从 Google Apps 脚本发送到 Javascript,使用了
    google.script.run

注:

  • 在此修改中,假设工作表“BDD”的列是“事件”、“开始时间”和“结束时间”。请注意这一点。当您更改电子表格时,请修改功能
    getValues

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.