本記事では、
- スプレッドシートの各セルに入力された値を
- スライドのテキストボックスやテーブルのセルに
- ワンクリックで自動転記する
方法を、実例(スプレッドシートに入力した月毎の売上データを、会議資料となるスライドに自動転記)を用いて紹介します。
スプレッドシートとスライドの準備
Googleスプレッドシートを立ち上げて、転記したい内容を入力するフォーマットを作成します。
本記事では、以下のような月間の売上・経費・粗利を顧客別に纏めた「販売成績フォーマット」を用意しました。
続いてGoogleスライドを立ち上げて、転記される側のフォーマットを作成します。
本記事では、以下のような「月例会議資料」をイメージしたフォーマットを用意しました。
スライドにセットした各種シェイプ(テキストボックスなど)は、次のステップで要素を取得しやすいようにタイトルを付けておきます。以下のように、転記させたいシェイプを選択して右クリック → 「代替テキスト」→「高度なオプション」を選択すると、それぞれのシェイプにタイトルを追加することができます。
本記事では、以下のようにタイトルを追加しました。
- 「月」を転記するテキストボックス → month
- 「担当者名」を転記するテキスト → pic
テーブルにもタイトルを追加できますが、本記事ではテーブルは1つしかないのでタイトルは追加しませんでした。テーブルが複数ある場合は、同じようにタイトルを付けて識別・取得しやすくする方がベターです。
Apps Scriptを起動してコードを記述
続いてApps Scriptを起動します。
開いているスプレッドシートの内容を取得し、先ほど用意したスライドに転記するためのコードを記述します。
「コード.js」が開かれていると思うので、右側にコードを記述します。
本実装では以下コードを記述し、「スプレッドシートからスライドに転記」というタイトルを設定しました。
function transferSpreadsheetToSlide() {
// スプレッドシートの情報
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 転記したいセルを指定
const month = sheet.getRange("A1").getValue(); // 月
const pic = sheet.getRange("D1").getValue(); // 担当者
const salesInfo = [
[sheet.getRange("A3").getValue(), sheet.getRange("B3").getValue(), sheet.getRange("C3").getValue(), sheet.getRange("D3").getValue()],
[sheet.getRange("A4").getValue(), sheet.getRange("B4").getValue(), sheet.getRange("C4").getValue(), sheet.getRange("D4").getValue()],
[sheet.getRange("A5").getValue(), sheet.getRange("B5").getValue(), sheet.getRange("C5").getValue(), sheet.getRange("D5").getValue()],
[sheet.getRange("A6").getValue(), sheet.getRange("B6").getValue(), sheet.getRange("C6").getValue(), sheet.getRange("D6").getValue()]
]; // 顧客・売上・経費・粗利
// スライド(1枚目)の情報を取得
const slideId = "XXXXXXXXXXXXXXXXXXXX"; // GoogleスライドのIDを指定
const slide = SlidesApp.openById(slideId);
const firstSlide = slide.getSlides()[0]; // 1枚目のスライドを指定
const shapes = firstSlide.getShapes(); // スライド内の図形を取得
const monthTextBox = shapes.find(s => s.getTitle() === "month"); // 「月」をセットするテキストボックスを取得
const picTextBox = shapes.find(s => s.getTitle() === "pic"); // 「担当者名」をセットするテキストボックスを取得
const table = firstSlide.getTables()[0]; // スライド内のテーブルを取得
// テキストボックスに値をセット
monthTextBox.getText().setText(month);
picTextBox.getText().setText(pic);
// テーブルに情報をセット
for (let row = 1; row < table.getNumRows(); row++) { // 1行目はヘッダーなのでスキップ
for (let col = 0; col < table.getNumColumns(); col++) {
table.getCell(row, col).getText().setText(salesInfo[row - 1][col]);
}
}
}
- スプレッドシートの値を取得
-
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
で現在アクティブな(開かれている)スプレッドシートを取得し、sheet
という変数に代入します。続くsheet.getRange("セル番号").getValue()
では、getRange
の引数に指定したセルの値を取得できます。売上や経費などのデータは配列形式で取得し、スライドに転記する際にfor
文を用いてコードを簡素化しています。
配列でデータを取得する場合、取得する順番に注意してください。 - スライド情報の取得
-
const monthTextBox = shapes.find(s => s.getTitle() === "month" && s.getText())
で「月」情報をmonthTextBox.getText().setText(month);
lidesApp.openById(slideId)
で特定のスライドを取得できます。slideId
には取得したいスライドのIDを入力します。IDの確認は、取得したいスライドを開き、そのURLの以下赤字の部分です。https://docs.google.com/presentation/d/この部分/edit#slide=id.xxxxxxx
-
続いて何枚目のスライドを取得するか(本記事では1枚目)を記述し、
getShapes()
やgetTables()
を用いてスライド内のテキストボックスやテーブルを取得します。「月」「担当者名」をセットするテキストボックスは、STEP 1で追加したタイトル情報をもとにfind()
を用いてそれぞれ取得します。 - テキストボックスとテーブルに値を転記
-
getText().setText()
でテキストボックスやテーブルのセルに値(文字列)をセットできます。テーブルへのセットはfor
文を用いて、2行目以降(row = 0
はスキップ)の各列にSTEP 1で取得した値をセットしていきます。
コードを記述できたら保存し、スプレッドシートに戻ります。
スライドに転記ボタンの設置
スプレッドシートの「挿入」タブから「図形描画」を選択し、図形とテキストを組み合わせボタンを作成します。
作成したボタンは、スプレッドシートの適当な位置に移動させます。
設置したボタンをクリックし、ボタン右の方に表示される「⋮」をクリックして「スクリプトを割り当て」を選択します。
ウィンドウが表示されるので、STEP 2で作成したメソッド名(本実装ではtransferSpreadsheetToSlide
)を記入します。
ボタンをクリックし、Googleアカウントと連携
STEP 3で設置したボタンをクリックし、Googleアカウントと連携させると同時にスライドに転記されるかを確認します。
スクリプトを割り当てたボタンを初めてクリックすると、認証を求めるウィンドウが表示されるので、以下画像の通り認証を進めていきます。
特に問題がなければコードが実行され、スプレッドシートの内容がスライドに転記されるはずです!