Empty line in generated docs

32 views
Skip to first unread message

Mark

unread,
Oct 29, 2024, 4:37:00 AMOct 29
to Google Apps Script Community
I'm writing a function which fetches events from a calendar and generating google docs.
However, when checking all the reports i've generated, all of them always have a blank line before the header or title. It's so annoying and I want to use as little space as possible to fit stuffs in one page.
Can anyone assist me?

function createDocReport(eventsList, startDate, endDate){
  var docTitle = 'Weekly Room Booking Report: ' + formatDate(startDate) + ' to ' + formatDate(endDate);
  var doc = DocumentApp.create(docTitle);
  var body = doc.getBody();
  body.clear();
 
  body.appendParagraph(docTitle).setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph('Generated on: ' + new Date().toLocaleDateString());

  // loop through each rooms and add events to report
  eventsList.forEach(function(room){
    body.appendParagraph(room.room).setHeading(DocumentApp.ParagraphHeading.HEADING2);

    var table = [];
    table.push(['Date & Time', 'Event Details']);


    room.events.forEach(function(event){
      var formattedDate = formatEventDate(event.start, event.end);
      var title = event.title;
      var description = event.description;

      var date = formattedDate.split(' (')[0];
      var time = formattedDate.split(' (')[1].replace(')', '');
      var eventDetails = title + '\n' + "Description: " + description;

      var formattedDateTime = date + '\n' + time;
      table.push([formattedDateTime,eventDetails]);
    });

    var docTable = body.appendTable(table);

    for (var i = 1; i < docTable.getNumRows(); i++){
      docTable.getRow(i).getCell(0).getChild(0).asParagraph().setBold(true);
      docTable.getRow(i).getCell(1).getChild(0).asParagraph().setBold(true).setForegroundColor('#b00000');
    }

    body.appendHorizontalRule();
  });
Message has been deleted

Fabrice Faucheux

unread,
Nov 4, 2024, 2:56:37 AMNov 4
to Google Apps Script Community
Bonjour,

Je vous propose ce code.

function creerRapportReservationSalles(listeEvenements, dateDebut, dateFin) {
// Assurez-vous que les dates sont au format Date
dateDebut = new Date(dateDebut);
dateFin = new Date(dateFin);

const titreDoc = `Rapport hebdomadaire de réservation de salle : ${formatterDate(dateDebut)} à ${formatterDate(dateFin)}`;
const doc = DocumentApp.create(titreDoc);
const corps = doc.getBody();
corps.clear();

corps.appendParagraph(titreDoc).setHeading(DocumentApp.ParagraphHeading.HEADING1);
corps.appendParagraph(`Généré le : ${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'dd/MM/yyyy')}`);

listeEvenements.forEach((salle, index) => {
if (!salle.nomSalle) return; // Vérifie la présence du nom de la salle
corps.appendParagraph(salle.nomSalle).setHeading(DocumentApp.ParagraphHeading.HEADING2);

const tableau = [['Date & Heure', 'Détails de l’événement']];

salle.evenements.forEach(evenement => {
// Assurez-vous que les dates de l'événement sont au format Date
const debut = new Date(evenement.debut);
const fin = evenement.fin ? new Date(evenement.fin) : null;

const dateHeureFormatee = formatterDateEvenement(debut, fin);
const titre = evenement.titre || "Sans titre"; // Valeur par défaut si titre manquant
const description = evenement.description || "Aucune description"; // Valeur par défaut si description manquante

const [date, heure] = dateHeureFormatee.split(' (');
const detailsEvenement = `${titre}\nDescription : ${description}`;

tableau.push([`${date}\n${heure ? heure.replace(')', '') : ''}`, detailsEvenement]);
});

const tableauDoc = corps.appendTable(tableau);

// Mise en forme des en-têtes
const headerRow = tableauDoc.getRow(0);
headerRow.getCell(0).getChild(0).asParagraph().setBold(true);
headerRow.getCell(1).getChild(0).asParagraph().setBold(true);

// Formate les cellules et ajuste la largeur en ajoutant un espace invisible dans la première colonne
for (let i = 1; i < tableauDoc.getNumRows(); i++) {
const row = tableauDoc.getRow(i);
const cell1 = row.getCell(0);
const cell2 = row.getCell(1);

cell1.setPaddingTop(0).setPaddingBottom(0);
cell2.setPaddingTop(0).setPaddingBottom(0);

// Ajoute un espace dans la première cellule pour ajuster la largeur
if (cell1.getNumChildren() > 0) {
cell1.getChild(0).asText().appendText(" ");
}

// Mise en gras du contenu de chaque cellule pour les lignes d'événements
cell1.getChild(0).asParagraph().setBold(true);
cell2.getChild(0).asParagraph().setBold(true).setForegroundColor('#b00000');
}

if (index < listeEvenements.length - 1) {
corps.appendHorizontalRule();
}
});
}

// Fonctions de formatage
function formatterDate(date) {
return Utilities.formatDate(date, Session.getScriptTimeZone(), 'dd/MM/yyyy');
}

function formatterDateEvenement(debut, fin) {
const dateDebut = Utilities.formatDate(debut, Session.getScriptTimeZone(), 'dd/MM/yyyy');
const heureDebut = Utilities.formatDate(debut, Session.getScriptTimeZone(), 'HH:mm');
const heureFin = fin ? Utilities.formatDate(fin, Session.getScriptTimeZone(), 'HH:mm') : '';

return heureFin ? `${dateDebut} (${heureDebut} - ${heureFin})` : `${dateDebut} (${heureDebut})`;
}

Fabrice
https://atelier-informatique.com/
Reply all
Reply to author
Forward
0 new messages