Google Apps Scripts - Sheets en Slides

Bonjour,

Je cherche actuellement une manière (gratuite si possible) de pouvoir transformer un Google Sheets en Google Slides et je suis tombé sur un site qui présente un Script pour y parvenir. Je n'ai pas encore 30 messages donc ne peux pas mettre de lien dans mon message, vous le trouverez alors en PJ.

51sitegoogleappsscript.txt (91.00 Octets)

Je viens vers vous car je n'y connais rien en Google Apps Script, c'est la raison pour laquelle je cherche actuellement un script déjà préparé (je n'ai pas le temps d'apprendre à utiliser Google Apps Script), ainsi, je souhaitais savoir si ce script était vous paraît correct car il n'a pas l'air de fonctionner pour moi. Si la faute ne vient pas du script, alors ça vient de moi, je suis donc preneur de vos conseils sur l'utilisation de google apps script.

Je suis disponible si vous avez des questions, merci d'avance pour vos réponses !

Maël

Bonjour,

Pouvez vous copier coller le script dans un message ? Lors de l'édition d'un message vous pouvez insérer sur script en cliquant sur le bouton "Code" qui est symbolisé par le logo : </>

Bien sûr, voici le code :

function createOneSlidePerRow() {

  // Replace <INSERT_SLIDE_DECK_ID> wih the ID of your 
  // Google Slides presentation.
  let masterDeckID = "<INSERT_SLIDE_DECK_ID>";

  // Open the presentation and get the slides in it.
  let deck = SlidesApp.openById(masterDeckID);
  let slides = deck.getSlides();

  // The 2nd slide is the template that will be duplicated
  // once per row in the spreadsheet.
  let masterSlide = slides[1];

  // Load data from the spreadsheet.
  let dataRange = SpreadsheetApp.getActive().getDataRange();
  let sheetContents = dataRange.getValues();

  // Save the header in a variable called header
  let header = sheetContents.shift();

  // Create an array to save the data to be written back to the sheet.
  // We'll use this array to save links to the slides that are created.
  let updatedContents = [];

  // Reverse the order of rows because new slides will
  // be inserted at the top. Without this, the order of slides
  // will be the inverse of the ordering of rows in the sheet. 
  sheetContents.reverse();

  // For every row, create a new slide by duplicating the master slide
  // and replace the template variables with data from that row.
  sheetContents.forEach(function (row) {

    // Insert a new slide by duplicating the master slide.
    let slide = masterSlide.duplicate();

    // Populate data in the slide that was created
    slide.replaceAllText("{{firstName}}", row[0]);
    slide.replaceAllText("{{lastName}}", row[1]);
    slide.replaceAllText("{{grade}}", row[2]);

    // Create the URL for the slide using the deck's ID and the ID
    // of the slide.
    let slideUrl = `https://docs.google.com/presentation/d/${deck.getId()}/edit#slide=id.${slide.getObjectId()}`;

    // Add this URL to the 4th column of the row and add this row
    // to the data to be written back to the sheet.
    row[3] = slideUrl;
    updatedContents.push(row);
  });

  // Add the header back (remember it was removed using 
  // sheetContents.shift())
  updatedContents.push(header);

  // Reverse the array to preserve the original ordering of 
  // rows in the sheet.
  updatedContents.reverse();

  // Write the updated data back to the Google Sheets spreadsheet.
  dataRange.setValues(updatedContents);

  // Remove the master slide if you no longer need it.
  masterSlide.remove();

}

Ok, donc ce script fonctionne ainsi :

Un fichier google sheet avec un tableau contenants des données (nom, prénom, classe).

Un fichier slide avec une trame (la 2nd slide).

Pour chaque ligne du tableau sheet (à partir de la 2nd, la première est l'en-tête), le script créé une nouvelle slide en partant de la trame et en y insérant les données de sheet (nom, prénom, classe).

Puis, insère le lien de la slide généré dans le tableau sheet original (à la 4ème colonne) pour chaque ligne.

J'ignore cependant si une nouveau fichier slide est généré à chaque fois ou si c'est juste une nouvelle slide qui est créé dans le fichier de base, j'ai l'impression que des slides sont crées sur le fichier d'origine mais pas certain.

Si ce déroulé correspond à votre besoin voici ce que vous pouvez faire afin de l'adapter à votre besoin, sans trop toucher au script :

-1 créez un fichier slide, avec un trame bidon en second slide, avec les éléments : {{firstName}} + {{lastName}} + {{grade}}

-2 créez un fichier sheet avec une en-tête et 3 colonnes avec des données

-3 mettez l'ID de votre fichier slide à la place de "<INSERT_SLIDE_DECK_ID>" (ligne 5)

-4 effectuez le script, voyez si cela fonctionne

-5 SI OK, remplacer les tag {{firstName}} + {{lastName}} + {{grade}} par vos besoins dans la trame, et dans le script à cet endroit :

    slide.replaceAllText("{{firstName}}", row[0]);
    slide.replaceAllText("{{lastName}}", row[1]);
    slide.replaceAllText("{{grade}}", row[2]);

Attention, row[0] = 1ère cellule de chaque ligne

row[1] = 2ème cellule, etc.

Merci beaucoup pour cette aide ça fonctionne ! Je confirme que c'est tout à fait ce que je cherchais à faire. Dernière petite question : je veux créer un bouton sur lequel cliquer pour exécuter le script mais lorsque j'assigne le script (je mets le nom du fichier en .gs) ça me met "La fonction de script [NomFichier] est introuvable. Que faut-il mettre pour que cela fonctionne ?

Bonjour Mael,

Il faut mettre simplement le nom de ton script sans le ".gs" à la fin.

Cordialement,

Fil.

Il faut mettre le nom de la fonction : createOneSlidePerRow dans votre cas

Cela fonctionne merci beaucoup pour votre aide !!! Bonne soirée

Rechercher des sujets similaires à "google apps scripts sheets slides"