Skip to content

Instantly share code, notes, and snippets.

@trapezoid
Last active January 28, 2023 05:44
Show Gist options
  • Save trapezoid/6096dc0ab59fba3004bf75cd8adff384 to your computer and use it in GitHub Desktop.
Save trapezoid/6096dc0ab59fba3004bf75cd8adff384 to your computer and use it in GitHub Desktop.
GoogleSlideのスピーカーノートに書いた台本を元にタイムコードを埋め込むGAS
function onOpen() {
SlidesApp.getUi()
.createMenu("UpdateTalkTimes")
.addItem("Update TalkTime in Notes", `updateTalkTimesAction`) //タイムコードを埋め込む。繰り返し実行可
.addItem("Remove TalkTime in Notes", `removeTalkTimesAction`) //タイムコードを取り除く
.addToUi()
}
function removeTalkTimesAction() {
//一部だけリセットしたければその区間を引数に渡す。省略時は全てが対象になる
removeTalkTimesAndCalculateTotalTextLength();
}
function updateTalkTimesAction() {
let ui = SlidesApp.getUi();
let promptResponse = ui.prompt("発表時間の注釈の更新", "発表時間を分で入力して下さい", ui.ButtonSet.OK_CANCEL);
let talkMinutes = Number.parseInt(promptResponse.getResponseText());
updateTalkTimes(talkMinutes * 60)
}
function getActivePresentation(slideStart, slideEnd)
{
var slides = SlidesApp.getActivePresentation().getSlides()
if (slideStart != undefined)
{
return slides.slice(slideStart, slideEnd)
}
else {
return slides;
}
}
function removeTalkTimesAndCalculateTotalTextLength(slideStart, slideEnd) {
var totalTextLength = 0;
getActivePresentation(slideStart, slideEnd).forEach(slide => {
let spekerNoteShape = slide.getNotesPage().getSpeakerNotesShape()
let text = spekerNoteShape.getText()
text.setText(stripText(text.asString()))
totalTextLength += text.asString().length
})
return totalTextLength;
}
function stripText(text) {
return text.replace(/\[#\d*:\d*:\d*\-#\d*:\d*:\d*\]\n/gm, "")
}
function updateTalkTimes(talkTimeInSeconds, slideStart, slideEnd) {
var totalTextLength = removeTalkTimesAndCalculateTotalTextLength(slideStart, slideEnd);
var elapsedTextLength = 0;
getActivePresentation(slideStart, slideEnd).forEach(slide => {
let spekerNoteShape = slide.getNotesPage().getSpeakerNotesShape()
let text = spekerNoteShape.getText()
let startTime = new Date(1000 * talkTimeInSeconds * (elapsedTextLength / totalTextLength));
elapsedTextLength += text.asString().length
let endTime = new Date(1000 * talkTimeInSeconds * (elapsedTextLength / totalTextLength));
text.insertText(
0,
`[#${startTime.getUTCHours().toString().padStart(2,'0')}:${startTime.getUTCMinutes().toString().padStart(2,'0')}:${startTime.getUTCSeconds().toString().padStart(2,'0')}`+
`-#${endTime.getUTCHours().toString().padStart(2,'0')}:${endTime.getUTCMinutes().toString().padStart(2,'0')}:${endTime.getUTCSeconds().toString().padStart(2,'0')}]\n`)
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment