Configuré una secuencia de comandos de Google Apps para generar nuevas diapositivas con plantilla a partir de los datos contenidos en una hoja de cálculo . Estos datos se actualizarían periódicamente. Planeo establecer un activador de proyecto para generar nuevas diapositivas de forma regular.
En este momento, evito el problema de duplicar diapositivas durante las actualizaciones activadas simplemente eliminando las diapositivas generadas anteriormente (consulte el ejemplo de código a continuación), pero me encantaría simplemente agregar nuevas diapositivas en lugar de eliminarlas y regenerarlas (para conservar cualquier edición de las diapositivas generadas anteriormente).
¿Algún consejo y truco de desarrolladores de Javascript más experimentados para este codificador de R rebelde sobre cómo abordar este problema?
function myFunction() { var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1RjA4BJ4IKyjlh_l6vNaC7Q8wgUet1eNBo4_KJiF1pbQ/edit"; var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl); var deck = SlidesApp.getActivePresentation(); var sheet = ss.getSheetByName('test'); var values = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues(); var slides = deck.getSlides(); var templateSlide = slides[1]; var presLength = slides.length; // remove previously generated slides // TODO: figure out how to append rather than delete and regenerate for (var i = 2; i < slides.length; i++){ slides[i].remove() } values.forEach(function(page){ if(page[0]){ templateSlide.duplicate(); slides = deck.getSlides(); newSlide = slides[2]; var shapes = (newSlide.getShapes()); shapes.forEach(function(shape){ shape.getText().replaceAllText('{{name}}',page[0]); shape.getText().replaceAllText('{{value1}}',page[1]); shape.getText().replaceAllText('{{value2}}',page[2]); shape.getText().replaceAllText('{{value3}}',page[3]); shape.getText().replaceAllText('{{value4}}',page[4]); shape.getText().replaceAllText('{{value5}}',page[5]); shape.getText().replaceAllText('{{value6}}',page[6]); shape.getText().replaceAllText('{{value7}}',page[7]); shape.getText().replaceAllText('{{value8}}',page[8]); shape.getText().replaceAllText('{{value9}}',page[9]); shape.getText().replaceAllText('{{value10}}',page[10]); }); presLength = slides.length; newSlide.move(presLength); } }); }¡Lo descubrí actualizando la fila inicial comprobando la longitud de la presentación!
function myFunction() { var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/1RjA4BJ4IKyjlh_l6vNaC7Q8wgUet1eNBo4_KJiF1pbQ/edit"; var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl); var deck = SlidesApp.getActivePresentation(); var sheet = ss.getSheetByName('test'); var slides = deck.getSlides(); var templateSlide = slides[1]; var presLength = slides.length; // new data update // var rowLength = sheet.getLastRow(); var startRow = 2; // update startRow when not initial run if(presLength != 2){ startRow = presLength; } // save newly generated data range var values = sheet.getRange(startRow, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues(); values.forEach(function(page){ if(page[0]){ templateSlide.duplicate(); slides = deck.getSlides(); newSlide = slides[2]; var shapes = (newSlide.getShapes()); shapes.forEach(function(shape){ shape.getText().replaceAllText('{{name}}',page[0]); shape.getText().replaceAllText('{{value1}}',page[1]); shape.getText().replaceAllText('{{value2}}',page[2]); shape.getText().replaceAllText('{{value3}}',page[3]); shape.getText().replaceAllText('{{value4}}',page[4]); shape.getText().replaceAllText('{{value5}}',page[5]); shape.getText().replaceAllText('{{value6}}',page[6]); shape.getText().replaceAllText('{{value7}}',page[7]); shape.getText().replaceAllText('{{value8}}',page[8]); shape.getText().replaceAllText('{{value9}}',page[9]); shape.getText().replaceAllText('{{value10}}',page[10]); }); presLength = slides.length; newSlide.move(presLength); } }); }