I've created a script to generate a calendar of the week's events in Google Docs. It's working, but I can't figure out how to remove that extra line return at the beginning of each cell in the 2nd column (see image).
ChatGPT suggested using trim() and few other options, but none of those suggestions worked.
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;
}
When I saw your script, I'm worried that the initial paragraph in the cell might be the reason for your current issue. So, in your script, how about the following modification?
if (eventsList !== '') {
eventsCell.clear();
eventsCell.appendParagraph(eventsList);
} else {
eventsCell.appendParagraph('No events');
}
if (eventsList !== '') {
eventsCell.clear();
eventsCell.insertParagraph(0, eventsList);
} else {
eventsCell.insertParagraph(0, 'No events');
}
or
if (eventsList !== '') {
eventsCell.clear();
eventsCell.appendParagraph(eventsList);
} else {
eventsCell.appendParagraph('No events');
}
eventsCell.getChild(0).removeFromParent();