はじめに
こんにちは。ももクロの走れを久々に聴いて、あー好きだわ。と思いました、筆者です
さて、今回は、自社の媒体資料を毎月手動で値更新していたので、自動化しましたので記事にしました。
参考になれば幸いです。
前提
媒体資料の制約というか仕様みたいなものがあります。
- Googleスライドで管理している.
- 資料内の値にGoogleAlyticsの値が含まれている.
- 資料内の値にGoogleSearchConsoleの値が含まれている.
- 資料は毎月更新したい.
- 古い資料はアーカイブフォルダに移動したい.
方針
- Googleスプレッドシートで更新対象の値を管理する.
- 1の値は自動で更新されるようにしておく.
- アーカイブフォルダを作成しておく.
- 毎月3日に作成処理を行う.
- GoogleAlytics、GoogleSearchConsoleのデータが溜まるのを待つため.
実装
1. 更新値管理スプレッドシート作成.
必要な値は以下の3つです.
- slide_object_id: スライド識別する一意のID
- element_object_id: スライド内の要素を識別する一意のID
- value: 更新値
No. | slide_object_id | element_object_id | value |
---|---|---|---|
1 | gdf91911947_0_0 | gdf91911947_0_1 | タイトル(更新済み) |
2 | gdf91911947_0_0 | gdf91911947_0_2 | 説明文(更新済み) |
表示しているスライドのslide_object_id
はURLから取得可能です.
element_object_id
はDevToolsから取得可能です.
value
は別シートでプラグイン等で月次集計しているGoogleAlyticsの値を使ってます.
※Qiitaのこの記事上ではべた書きします
2. アーカイブ用フォルダ作成
このとき、フォルダIDを控えておいて下さい。
3. スクリプトエディタ起動
今回は以下のように、スプレッドシートに紐づくスクリプトとしてGASを書いていこうと思います。
4. GASを書きます
ちまちま書いてもあれなので、一気に書きます
const main = () => {
const google_drive_folder_id = 'xxxx';
const google_drive_folder_id_archive = 'yyyy'
const base_file_name = '媒体資料_'
const date = new Date()
// yyyymm
const date_last_month_yyyymm = Utilities.formatDate(new Date(date.getFullYear(), date.getMonth() - 1, 1), 'JST', 'yyyyMM')
const date_this_month_yyyymm = Utilities.formatDate(date, 'JST', 'yyyyMM')
// file name
const file_name_old = base_file_name + date_last_month_yyyymm
const file_name_new = base_file_name + date_this_month_yyyymm
const slide_new = DriveApp.getFolderById(google_drive_folder_id).getFilesByName(file_name_new);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
const data = sheet.getRange('A2:D' + sheet.getLastRow()).getValues();
if (! slide_new.hasNext()) {
// 生成対象月のスライドが無ければ前月スライドをコピーして作成.
const slides_original = DriveApp.getFolderById(google_drive_folder_id).getFilesByName(file_name_old);
if (! slides_original.hasNext()) {
return false;
}
const slide_original = slides_original.next()
var new_presentation_id = slide_original.makeCopy(file_name_new).getId()
// 古いslideをアーカイブフォルダに移動.
slide_original.moveTo(DriveApp.getFolderById(google_drive_folder_id_archive))
} else {
var new_presentation_id = slide_new.next().getId();
}
// 値更新
let slide, element;
for (var i in data) {
slide = SlidesApp.openById(new_presentation_id).getSlideById(data[i][1]);
element = slide.getPageElementById(data[i][2]);
element.asShape().getText().setText(data[i][3]);
}
}
5. スクリプト実行
スクリプト実行には以下権限が必要になるので、初回起動時のダイアログに従って許可してください
6. 動作確認
7. トリガーセット
毎月自動で更新したいので、以下のようにトリガーセットします。
これで完了!
おわりに
駆け足になりましたが、GoogleスライドをGASで更新する流れでした!
今回は文字しか更新していませんが、画像なども更新できますよ
それでは!