たくさんのGoogleスライドからテキストデータだけを抜き出してスプレッドシート上の一覧にするGASを作ったのでここに公開します.
背景
- 研修講師として,参加者にGoogleスライドの雛形を配布(講師と共有設定されている)
- その研修において,参加者がGoogleスライドに書き込みを行う
- 研修実施後に,参加者がGoogleスライドにどのようなことを書き込みしているか確認したい
という状況において,書き込み内容を一覧化するGASコードを書きました.
イメージ
コード
function main(){ // フォルダの指定 const folderId= 'Goolgeスライドが格納されているフォルダのID'; //フォルダ内のすべてのファイルを取得 const folder = DriveApp.getFolderById(folderId); //ファイルタイプを指定(MINEタイプ) const filetype = "application/vnd.google-apps.presentation"; //スライドを指定 const files = folder.getFilesByType(filetype); //抜き出したテキストデータを転記するためのスプレッドシートを指定 var sss = SpreadsheetApp.openById('スプレッドシートのID').getSheetByName("シート1"); //何行目のデータか //スプレッドシートに書き込む行数 let rowCnt = 1; //各ファイル(スライド)ごとにテキストデータを抜き出す while(files.hasNext()){ let file = files.next(); let fileURL = file.getUrl(); // ファイルURL var presentation = SlidesApp.openByUrl(fileURL); var slides = presentation.getSlides(); //slidesの1枚目(インデックス0)を指定する //getpageElements()でページ要素のリストを取得 var elements = slides[0].getPageElements(); //テキストデータが格納されているオブジェクトごとに列をわけてスプレッドシートに書き込む var colCnt = 0; //各スライドのオブジェクトの数だけ繰り返す for(let i = 0; i < elements.length; i++){ //オブジェクトがグループ化されている場合は,直接テキストデータが抜き出せない if (elements[i].getPageElementType() == SlidesApp.PageElementType.GROUP){ //getChildrenでグループ化されているオブジェクトの中身のオブジェクトを取り出す var children = elements[i].asGroup().getChildren(); for (let j = 0; j < children.length; j++){ var tmpTxt = children[j].asShape().getText().asString(); var tmpCell = sss.getRange(rowCnt, i+1+colCnt); tmpCell.setValue(tmpTxt); colCnt++; } //ページエレメントタイプがSHAPEの場合はテキストデータを直接抜き出せる }else if(elements[i].getPageElementType() == SlidesApp.PageElementType.SHAPE){ var tmpTxt = elements[i].asShape().getText().asString(); var tmpCell = sss.getRange(rowCnt, i+1+colCnt); tmpCell.setValue(tmpTxt); colCnt++; } } rowCnt++; } }
Javascriptがあまりわかっていないので,varとletの使い分けがおかしいかもしれません.