1
/
5

初めてのGoogleAppsScript(GAS)

開発エンジニアの松田です。
今回初めてストーリーを投稿させていただくことになりました。
自社内タスクのお手伝いでGoogleAppsScript(GAS)なるものを触ってみました。
初めてでしたがExcelVBAやJavaScriptあたりを少しでもかじったことがある人なら、割りとすんなり理解できるんじゃないかなと感じました。
依頼内容は、スプレッドシートの一覧シートに蓄積されたデータの中から指定したIDのレコードを別シートに転写&自動でPDF化するというもの。表計算ソフトの自動化ツールとしてはよく使われる機能ではないでしょうか。
今回はこの依頼の中で、ちょっと難しかったなという機能とメソッドを紹介してみようかなと思います。

pdf自動化

自動化するメソッド自体は調べたらすんなり出てきたのですが、pdf化されたときのページ設定を変えるのに少し時間がかかりました。

 let pdfOptions = "&exportFormat=pdf&format=pdf"
              + "&size=A4" //用紙サイズ (A4) 他にlegalやletterなどがあるようです
              + "&portrait=true"  //用紙の向き true:縦/false:横
              + "&fitw=true"  //ページ幅を用紙にフィットさせるか true:フィットさせる/false:原寸大
              + "&top_margin=0.50" //上の余白
              + "&right_margin=0.50" //右の余白
              + "&bottom_margin=0.50" //下の余白
              + "&left_margin=0.50" //左の余白
              + "&horizontal_alignment=CENTER" //水平方向の位置
              + "&vertical_alignment=TOP" //垂直方向の位置
              + "&printtitle=false" //スプレッドシート名の表示有無
              + "&sheetnames=false" //シート名の表示有無(true:ファイル名が左上に表示されます)
              + "&gridlines=false" //グリッドラインの表示有無
              + "&fzr=false" //固定行の表示有無
              + "&fzc=false" //固定列の表示有無;

これをPDF作成のベースとなるURLの後ろにくっつければ、pdfOptionsで設定した内容のレイアウトで出力されます。

 let url = "https://docs.google.com/spreadsheets/d/" + pdfOptions

という感じです。

行の高さの自動設定

PDF化の際に文字数が一定を超えるとセルから見切れたりするので、文字数によって行の高さが自動で変わるようにしました。

 let mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート名");
 mySheet.setRowHeight(row, size);

rowに「何行目か」、sizeに「何ピクセルにしたいか」を入れることでセットできました。
例えば…

 mySheet.setRowHeight(22,111);

とすると22行目を111ピクセルの高さに、となります。
同じように

.setColumnWidth(column, size);

で幅を設定することができるようでした。

あとは"文字数によって"の部分ですが、これは1行あたり20ピクセルに設定したい場合は…

size = セル内の改行数 * 20;

としてあげれば、メソッドが呼び出されるたびに文字数に応じて高さが変わるというわけです。


以上、GAS初心者が初めての依頼で「これは使える!」と思ったもの紹介でした!
何も知らない状態から自分で調べて扱えるようになる瞬間が一番楽しく、一番記憶に残る=身につくなあと久しぶりに実感しました。

株式会社シスナビ's job postings
3 Likes
3 Likes

Weekly ranking

Show other rankings
Invitation from 株式会社シスナビ
If this story triggered your interest, have a chat with the team?