将Google日历导出到Google文档表格:去除单元格首行空行求助
解决Google Docs表格单元格开头多余换行问题
问题描述
我编写了一段Google Apps Script脚本,用于将指定日期范围的Google日历事件生成到Google Docs表格中。脚本可正常运行,但第二列的每个单元格开头存在多余换行。我尝试了trim()等方法,均无法解决该问题,相关代码如下:
function fetchCalendarEvents() { var calendarIds = [ // Add subscribed calendar IDs here // e.g., 'calendar1@example.com', 'calendar2@example.com' ]; var startDate = new Date('2023-06-10'); // Replace with your desired start date var endDate = new Date('2023-06-18'); // Replace with your desired end date var docId = 'DOCUMENT_ID'; // Replace with your Google Doc document ID var doc = DocumentApp.openById(docId); var body = doc.getBody(); var dateRange = getDateRange(startDate, endDate); var table = body.appendTable().setBorderWidth(1); var headerRow = table.appendTableRow(); headerRow.appendTableCell('Date'); headerRow.appendTableCell('Event'); for (var i = 0; i < dateRange.length; i++) { var date = dateRange[i]; var eventRow = table.appendTableRow(); eventRow.appendTableCell(date.toDateString()); var allDayEvents = []; var timedEvents = []; for (var j = 0; j < calendarIds.length; j++) { var calendarId = calendarIds[j]; var events = CalendarApp.getCalendarById(calendarId).getEventsForDay(date); for (var k = 0; k < events.length; k++) { var event = events[k]; var startTime = event.getStartTime(); if (event.isAllDayEvent()) { allDayEvents.push(event.getTitle()); } else if (startTime) { timedEvents.push({ time: startTime, title: event.getTitle() }); } } } var eventsCell = eventRow.appendTableCell(); var eventsList = ''; allDayEvents.forEach(function (title) { eventsList += title + '\n'; }); timedEvents.sort(function (a, b) { return a.time - b.time; }); timedEvents.forEach(function (event) { eventsList += formatEventTime(event.time) + ' ' + event.title + '\n'; }); eventsList = eventsList.trim(); // Remove leading and trailing whitespace if (eventsList !== '') { eventsCell.clear(); eventsCell.appendParagraph(eventsList); } else { eventsCell.appendParagraph('No events'); } } } function formatEventTime(time) { var formattedTime = Utilities.formatDate(time, Session.getScriptTimeZone(), 'h:mm a'); return formattedTime; } function getDateRange(startDate, endDate) { var dateRange = []; var currentDate = new Date(startDate); while (currentDate <= endDate) { dateRange.push(new Date(currentDate)); currentDate.setDate(currentDate.getDate() + 1); } return dateRange; }
问题原因
调用eventRow.appendTableCell()时,Google Docs会自动在单元格中创建一个默认的空段落。原代码中仅在填充非空内容时才调用clear(),但空段落已经存在,导致后续添加的内容段落被放在空段落之后,视觉上表现为单元格开头有多余换行。
解决方案
在创建单元格后立即清除默认的空段落,再填充内容。修改代码中处理单元格的部分:
// ... 保留原有逻辑,替换以下单元格处理代码 var eventsCell = eventRow.appendTableCell(); eventsCell.clear(); // 提前清除默认空段落,避免开头换行 var eventsList = ''; allDayEvents.forEach(function (title) { eventsList += title + '\n'; }); timedEvents.sort(function (a, b) { return a.time - b.time; }); timedEvents.forEach(function (event) { eventsList += formatEventTime(event.time) + ' ' + event.title + '\n'; }); eventsList = eventsList.trim(); if (eventsList !== '') { eventsCell.appendParagraph(eventsList); } else { eventsCell.appendParagraph('No events'); }
通过提前清除单元格默认的空段落,就能彻底移除开头的多余换行,让内容直接从单元格顶部开始显示。
内容的提问来源于stack exchange,提问作者Michael Collins
相关产品推荐
相关产品推荐

