1. はじめに
「Google スプレッドシートでの Apps Script の基礎」Codelab 再生リストの第 5 回へようこそ。この Codelab では、Apps Script で スプレッドシート サービスを使用してデータセットをグラフ化する方法を学びます。また、Slides サービスを使用して、グラフを Google スライドの新しいプレゼンテーションにエクスポートする方法も学習します。
学習内容
- Apps Script を使用して折れ線グラフを作成する方法。
- グラフを新しいスライド プレゼンテーションにエクスポートする方法。
- スプレッドシートでユーザーにダイアログを表示する方法。
始める前に
これは、Google スプレッドシートを使用した Apps Script の基礎の再生リストの 5 番目の Codelab です。この Codelab を開始する前に、次の Codelab を完了してください。
必要なもの
- この再生リストの以前の Codelab で取り上げた Apps Script の基本的なトピックを理解している。
- Apps Script エディタに関する基本的な知識
- Google スプレッドシートに関する基礎知識
- スプレッドシートの A1 形式を読み取る機能
- JavaScript とその
String
クラスに関する基本的な知識
2. セットアップ
続行する前に、データを含むスプレッドシートが必要です。以前と同様に、これらの演習用にコピーできるデータシートを用意しています。手順は次のとおりです。
- このリンクをクリックしてデータシートをコピーし、[コピーを作成] をクリックします。新しいスプレッドシートが Google ドライブ フォルダに配置され、「日付と米ドルの為替レートのコピー」という名前が付けられます。
- スプレッドシートのタイトルをクリックし、「Copy of Dates and USD Exchange Rates」から「Dates and USD Exchange Rates」に変更します。シートは次のようになります。さまざまな日付の米ドルの為替レートに関する基本的な情報が記載されています。
- スクリプト エディタを開くには、[拡張機能] > [Apps Script] の順にクリックします。
時間を節約するため、このスプレッドシートにはカスタム メニューを設定するコードが少し含まれています。スプレッドシートのコピーを開いたときに、メニューが表示されたことがありますか?
このスプレッドシートとプロジェクトで、Codelab を開始する準備が整いました。次のセクションに進み、グラフと時間駆動型トリガーについて学習しましょう。
3. Apps Script を使用してスプレッドシートでグラフを作成する
データセットを可視化する特定のグラフを設計するとします。Apps Script を使用して、グラフを作成、編集し、Google スプレッドシートに挿入できます。グラフがスプレッドシートに含まれている場合、そのグラフは埋め込みグラフと呼ばれます。
グラフは、1 つ以上のデータ系列を可視化するために使用されます。埋め込みグラフの場合、通常、グラフに表示されるデータはスプレッドシート内のデータです。通常、スプレッドシートのデータを更新すると、スプレッドシートのグラフも自動的に更新されます。
Apps Script を使用して、カスタマイズされた埋め込みグラフをゼロから作成したり、既存のグラフを更新したりできます。このセクションでは、Apps Script と Spreadsheet
サービスを使用してスプレッドシートに埋め込みグラフを作成する基本について説明します。
実装
データ スプレッドシートのコピーの [Dates and Exchange Rates] データセットには、さまざまな通貨のさまざまな日付における為替レート(1 米ドルあたり)が表示されます。このデータの一部を可視化するグラフを作成する Apps Script 関数を実装します。
手順は次のとおりです。
- Apps Script エディタで、スクリプト プロジェクトの
Code.gs
スクリプトの末尾(onOpen()
関数の後)に次の関数を追加します。
/** * Creates and inserts an embedded * line chart into the active sheet. */ function createEmbeddedLineChart() { var sheet = SpreadsheetApp.getActiveSheet(); var chartDataRange = sheet.getRange( 'Dates and USD Exchange Rates dataset!A2:F102'); var hAxisOptions = { slantedText: true, slantedTextAngle: 60, gridlines: { count: 12 } }; var lineChartBuilder = sheet.newChart().asLineChart(); var chart = lineChartBuilder .addRange(chartDataRange) .setPosition(5, 8, 0, 0) .setTitle('USD Exchange rates') .setNumHeaders(1) .setLegendPosition(Charts.Position.RIGHT) .setOption('hAxis', hAxisOptions) .setOption("useFirstColumnAsDomain", true) .build(); sheet.insertChart(chart); }
- スクリプト プロジェクトを保存します。
コードレビュー
追加したコードは、グラフ「日付と米ドル為替レートのデータセット」メニュー項目によって呼び出される関数を実装し、基本的な折れ線グラフを作成します。コードを確認しましょう。
最初の行では、次の 3 つの変数を設定します。
sheet
: 現在アクティブなシートへの参照。chartDataRange
: 可視化するデータ範囲。コードでは、A1 形式を使用して、Dates and USD Exchange Rates dataset というシートのセル A2 ~ F102 を範囲として指定しています。シートに名前を付けることで、別のシートがアクティブになっている場合でも、範囲が常にデータの位置をカバーするため、メニュー項目が機能します。2 行目から開始すると、列ヘッダーが含まれ、最新の 100 件の日付(行)のみがグラフ化されます。hAxisOptions
: コードが横軸の外観を構成するために使用する設定情報を含む基本的な JavaScript オブジェクト。具体的には、横軸のテキストラベルを 60 度の傾斜に設定し、縦のグリッド線の数を 12 に設定します。
次の行では、折れ線グラフ ビルダー オブジェクトを作成します。Apps Script の埋め込みグラフは、ビルダー設計パターンを使用して作成されます。この設計パターンの詳細な説明はこの Codelab の範囲外です。ここでは、Spreadsheet
サービスが複数の EmbeddedChartBuilder
クラスを提供していることを理解しておいてください。グラフを作成するには、まずコードで埋め込みグラフ ビルダー オブジェクトを作成し、そのメソッドを使用してグラフの設定を定義してから、build()
メソッドを呼び出して最終的な EmbeddedChart
オブジェクトを作成します。すべてのグラフ構成はビルダー クラスを通じて管理されるため、コードで EmbeddedChart
オブジェクトを直接変更することはありません。
スプレッドシート サービスは、親 EmbeddedChartBuilder
クラスと、そこから継承する複数の子ビルダー クラス(EmbeddedLineChartBuilder
など)を提供します。子クラスを使用すると、Apps Script は特定のグラフタイプにのみ適用されるビルダーのグラフ構成メソッドを提供できます。たとえば、EmbeddedPieChartBuilder
クラスは、円グラフにのみ適用される set3D()
メソッドを提供します。
コードでは、この行でビルダー オブジェクト変数 lineChartBuilder
が作成されます。
var lineChartBuilder = sheet.newChart().asLineChart();
コードは Sheet.newChart()
メソッドを呼び出して EmbeddedChartBuilder
オブジェクトを作成し、EmbeddedChartBuilder.asLineChart()
を使用してビルダーのタイプを EmbeddedLineChartBuilder
に設定します。
次に、コードは lineChartBuilder を使用してグラフを構築します。このコード部分は、グラフの設定を定義する一連のメソッド呼び出しと、グラフを作成する build()
呼び出しで構成されています。前の Codelab で見たように、このコードではメソッド チェーンを使用して、コードを読みやすくしています。メソッド呼び出しの処理内容は次のとおりです。
addRange(range)
: グラフに表示するデータ範囲を定義します。setPosition(anchorRowPos, anchorColPos, offsetX, offsetY)
: シート内のグラフの配置場所を指定します。このコードでは、グラフの左上隅をセル H5 に挿入しています。setTitle(title)
: グラフのタイトルを設定します。setNumHeaders(headers)
: データ範囲内の行または列のうち、ヘッダーとして扱う行または列の数を指定します。ここでは、コードはデータ範囲の最初の行をヘッダーとして使用します。つまり、その行のテキストはグラフの個々のデータ系列のラベルとして使用されます。setLegendPosition(position)
: グラフの凡例をグラフの右側に移動します。このメソッドは、Charts.Position 列挙型をパラメータとして使用します。setOption(option, value)
: 複雑なグラフのオプションを設定します。ここでは、コードでhAxis
オプションをhAxisOptions
オブジェクトに設定しています。このメソッドを使用して設定できるオプションはいくつかあります。各グラフタイプのオプションと可能な値については、Charts API グラフ ギャラリーをご覧ください。たとえば、折れ線グラフで設定できるオプションについては、折れ線グラフの構成オプションをご覧ください。setOption(option, value)
メソッドは高度なトピックなので、Apps Script でのグラフ作成に慣れるまでは使用しないことをおすすめします。build()
: 上記の設定を使用してEmbeddedChart
オブジェクトを作成して返します。
最後に、コードは Sheet.insertChart(chart)
を呼び出して、作成したグラフをアクティブなシートに配置します。
結果
次の手順で、書式設定関数の動作を確認できます。
- まだ行っていない場合は、Apps Script エディタでスクリプト プロジェクトを保存します。
- [データセットを表示 > グラフ「日付と米ドル為替レートのデータセット」] メニュー項目をクリックします。
スクリプトによって、データの右側に新しいグラフが配置されます。
これで、Apps Script を使用して埋め込み折れ線グラフを作成できました。次のセクションでは、グラフを Google スライドにエクスポートする方法について説明します。
4. グラフをスライドにエクスポートする
Apps Script の大きなメリットの一つは、Google Workspace アプリケーション間でデータを簡単に移動できることです。これらのアプリケーションのほとんどには、スプレッドシート サービスと同様の専用の Apps Script サービスがあります。たとえば、Gmail には Gmail サービス、Google ドキュメントには ドキュメント サービス、Google スライドには スライド サービスがあります。これらの組み込みサービスを使用すると、あるアプリケーションからデータを抽出し、処理して、別のアプリケーションに結果を書き込むことができます。
このセクションでは、Google スプレッドシートに埋め込まれたすべてのグラフを新しい Google スライドのプレゼンテーションにエクスポートする方法について説明します。また、スプレッドシートでユーザー カスタム メッセージを表示する 2 つの方法についても説明します。
実装
ここでは、[データセットを表示] > [グラフをスライドにエクスポート] メニュー項目から呼び出される関数を実装します。手順は次のとおりです。
- Apps Script エディタで、スクリプト プロジェクトの
Code.gs
スクリプトの末尾(createEmbeddedLineChart()
関数の後)に次の関数を追加します。
/** * Create a Slides presentation and export * all the embedded charts in this spreadsheet * to it, one chart per slide. */ function exportChartsToSlides() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // Fetch a list of all embedded charts in this // spreadsheet. var charts = []; var sheets = ss.getSheets(); for (var i = 0; i < sheets.length; i++) { charts = charts.concat(sheets[i].getCharts()); } // If there aren't any charts, display a toast // message and return without doing anything // else. if (charts.length == 0) { ss.toast('No charts to export!'); return; } // Create a Slides presentation, removing the default // title slide. var presentationTitle = ss.getName() + " Presentation"; var slides = SlidesApp.create(presentationTitle); slides.getSlides()[0].remove(); // Add charts to the presentation, one chart per slide. var position = {left: 40, top: 30}; var size = {height: 340, width: 430}; for (var i = 0; i < charts.length; i++) { var newSlide = slides.appendSlide(); newSlide.insertSheetsChart( charts[i], position.left, position.top, size.width, size.height); } // Create and display a dialog telling the user where to // find the new presentation. var slidesUrl = slides.getUrl(); var html = "<p>Find it in your home Drive folder:</p>" + "<p><a href=\"" + slidesUrl + "\" target=\"_blank\">" + presentationTitle + "</a></p>"; SpreadsheetApp.getUi().showModalDialog( HtmlService.createHtmlOutput(html) .setHeight(120) .setWidth(350), "Created a presentation!" ); }
- スクリプト プロジェクトを保存します。
コードレビュー
このコードは、予想よりも短くなる可能性があります。コードを 5 つのセクションに分割して、その動作を確認しましょう。
1: グラフを取得する
最初の数行では、アクティブなスプレッドシートを検索して埋め込みグラフをすべて見つけ、それらを配列 charts
に収集します。これらの行では、Spreadsheet.getSheets()
メソッドと Sheet.getCharts()
メソッドを使用して、シートとグラフのリストを取得しています。JavaScript の Array.concat()
メソッドは、各シートのグラフのリストを charts
に追加するために使用されます。
2: エクスポートするグラフがあることを確認する
このコードは、エクスポートするグラフがあるかどうかを確認します。空白のプレゼンテーションを作成しないように、グラフがない場合は、代わりに Spreadsheet.toast(message)
を使用してトースト メッセージを作成します。これは、スプレッドシートの右下に数秒間表示されてから消える小さな「ピーク」ダイアログです。
エクスポートするグラフがない場合、コードはトースト メッセージを作成して、それ以外の処理を行わずに終了します。エクスポートするグラフがある場合、コードは次の数行でプレゼンテーションの作成を続行します。
3: プレゼンテーションを作成する
新しいプレゼンテーションのファイル名を保持するために、変数 presentationTitle
が作成されます。スプレッドシートの名前として設定され、末尾に「 Presentation
」が連結されます。次に、コードはスライド サービス メソッド SlidesApp.create(name)
を呼び出してプレゼンテーションを作成します。
新しいプレゼンテーションは、空白のスライド 1 枚で作成されます。プレゼンテーションには不要なので、コードで Presentation.getSlides()
と Slide.remove()
を使用して削除します。
4: グラフをエクスポートする
次のセクションのコードでは、JavaScript オブジェクトの position
と size
を定義して、インポートしたグラフをスライドのどこに配置するか、グラフのサイズをピクセル単位で設定します。
このコードは、charts リスト内のすべてのグラフをループ処理します。グラフごとに、Presentation.appendSlide()
を使用して newSlide
が作成され、プレゼンテーションの最後にスライドが追加されます。Slide.insertSheetsChart(sourceChart, left, top, width, height)
メソッドは、指定された position
と size
を使用して、グラフをスライドにインポートするために使用されます。
5: プレゼンテーションの場所を共有する
最後に、新しいプレゼンテーションの場所をユーザーに伝えるコードが必要です。できれば、クリックして開くことができるリンクを含めるのが望ましいです。このため、コードは Apps Script の HTML
サービスを使用して、カスタム モーダル ダイアログを作成します。モーダル ダイアログ(Apps Script ではカスタム ダイアログとも呼ばれます)は、スプレッドシートのインターフェースの上に表示されるウィンドウです。カスタム ダイアログが表示されている間は、ユーザーはスプレッドシートを操作できません。
カスタム ダイアログを作成するには、コードにコンテンツを定義する HTML が必要です。これは html
変数で提供されます。コンテンツには、短い段落とハイパーリンクが含まれています。ハイパーリンクは presentationTitle
変数で、Presentation.getUrl()
が提供するプレゼンテーションの URL にリンクされています。ハイパーリンクでは target="_blank"
属性も使用されているため、プレゼンテーションはダイアログ内ではなく、新しいブラウザタブで開きます。
HTML は HtmlService.createHtmlOutput(html)
メソッドによって HtmlOutput
オブジェクトに解析されます。HtmlOutput
オブジェクトを使用すると、コードで HtmlOutput.setHeight(height)
と HtmlOutput.setWidth(width)
を使用してカスタム ダイアログのサイズを設定できます。
htmlOutput
が作成されると、コードは Ui.showModalDialog(htmlOutput, title)
メソッドを使用して、指定されたタイトルのダイアログを表示します。
結果
2 つ目のメニュー項目を実装したので、実際に動作を確認してみましょう。exportChartsToSlides()
関数をテストするには:
- まだ行っていない場合は、Apps Script エディタでスクリプト プロジェクトを保存します。
- スプレッドシートを開き、[データセットを表示 > グラフ「Dates and USD Exchange Rates dataset」] メニュー項目をクリックして、エクスポートするグラフを作成します。アクティブなシートのセル H5 に固定されて表示されます。
- [データセットを表示 > グラフをスライドにエクスポート] メニュー項目をクリックします。スクリプトの再認証を求められることがあります。
- スクリプトがリクエストを処理し、カスタム ダイアログが表示されます。
- 新しいスライド プレゼンテーションを開くには、[Dates and USD Exchange Rates Presentation] リンクをクリックします。
必要に応じて、スプレッドシートにグラフを追加し、メニュー項目を再度選択して、複数のスライドを含むプレゼンテーションを作成することもできます。
Google スプレッドシートで作成したグラフを Google スライドのプレゼンテーションにエクスポートできるようになりました。コードを記述してカスタム ダイアログを作成することもできます。
この Codelab の最後の演習はこれで完了です。次のセクションに進んで、学んだ内容を復習しましょう。
5. まとめ
お疲れさまでした。これで、この Codelab と「Google スプレッドシートでの Apps Script の基礎」の Codelab 再生リスト全体が完了しました。この再生リストで説明する原則を理解すれば、スプレッドシートの機能を拡張したり、Apps Script の機能を試したりすることができます。
この Codelab は役に立ちましたか?
学習した内容
- Apps Script を使用して埋め込み折れ線グラフを作成する方法。
- スプレッドシートでトースト メッセージとカスタム ダイアログをユーザーに表示する方法。
- グラフを新しいスライド プレゼンテーションにエクスポートする方法。
次のステップ
このプレイリストは完了です。ただし、Apps Script についてはまだ学ぶべきことがたくさんあります。
以下のリソースをご確認ください。
- Apps Script デベロッパー向けドキュメント
- Apps Script ガイド
- Apps Script リファレンス ドキュメント
- StackOverflow での Apps Script に関する質問
- GitHub の Apps Script コードサンプル
スクリプト作成をお楽しみください。