Skip to content

Instantly share code, notes, and snippets.

@msbarry
Last active February 7, 2024 11:39
Show Gist options
  • Save msbarry/9862e10cf4113d8e325ee14ccd8f62c6 to your computer and use it in GitHub Desktop.
Save msbarry/9862e10cf4113d8e325ee14ccd8f62c6 to your computer and use it in GitHub Desktop.
Google App Script to create a doc with speaker notes from slides
var INPUT_PRESO_ID = "<id>";
var OUTPUT_DOC_ID = "<id>";
function createNotesDoc() {
var presentation = Slides.Presentations.get(INPUT_PRESO_ID)
var out = DocumentApp.openById(OUTPUT_DOC_ID)
out.getBody().clear();
table = out.getBody().appendTable();
var links = [];
for (var i = 0; i < presentation.slides.length; i++) {
Logger.log("Exporting page " + (i + 1) + "/" + presentation.slides.length);
var slide = presentation.slides[i];
var text = slide.slideProperties.notesPage.pageElements[1].shape.text;
var row = table.appendTableRow();
var url = "https://docs.google.com/presentation/d/" + INPUT_PRESO_ID + "/export/png?id=" + INPUT_PRESO_ID + "&pageid=" + slide.objectId;
var imageCell = row.appendTableCell();
imageCell.removeChild(imageCell.getChild(0)); // remove empty first paragraph
imageCell.appendImage(UrlFetchApp.fetch(url).getBlob()).setWidth(160).setHeight(90);
var noteCell = row.appendTableCell();
noteCell.removeChild(noteCell.getChild(0)); // remove empty first paragraph
table.setColumnWidth(0, 140);
var noteParagraph = noteCell.appendParagraph("");
if (text) {
var textElements = text.textElements;
var fullContent = "";
for (var j = 0; j < textElements.length; j++) {
if (textElements[j].textRun) {
fullContent += textElements[j].textRun.content;
}
}
if (fullContent.trim()) {
noteParagraph.appendText(fullContent.trim());
}
}
}
}
@olivier-menicot
Copy link

olivier-menicot commented Jan 31, 2024

Thank you, it works great exactly as I expected !!

@emisca
Copy link

emisca commented Feb 7, 2024

see also https://stackoverflow.com/questions/59958862/how-to-embed-a-slide-in-a-google-doc-using-app-script/77949512#77949512 for a trick to put linked slide thumbnails instead of static images.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment