Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Google DriveのファイルをGASで読み込む

実際のところ

var file = DriveApp.getFileById('1234567890abcdefghijklmnopqrstuvwxyz');

これでfile変数にはファイルの情報が入るわけですが、取り出す際には型を気を付けないといけません。
getAs関数ではblob化されたファイルについて、画像かPDFの形で呼び出す事ができます。

 // PDF
var result = file.getAs(MimeType.PDF);

WordやExcelにする場合、fetchURLの仕組みとURLのexportオプションをつかった方式が現実的なようです。

GASで作業ユーザーのメールアドレスを取得する

誰が作業しているか知っておきたい事もありますよね。
作業ログとか、あるいはFireBaseと連携するときの権限とか。
その場合、BaseにあるUserクラスを使います。

実際のところ

以下の例ではSessionに保存されているログインユーザーを文字列として取得します。

  var str = Session.getActiveUser().getEmail();

ログインしていない/匿名の場合には空文字を返すようです。

【読書メモ】村上式シンプル英語勉強法

Google日本支社社長が必要に迫られて身に着けた英語術の本です。

英借文、単語主義、自分に関係ある領域に絞ったコンテンツをあたる等々、まるで受験本みたいな感じ。

こういった実用主義な考えからなのか、英語勉強自体に異議を見出すタイプの人からは相当批判的レビューがついてます。

私のように、学術的な事は置いておいて早く道具として使いたい人には向いている感じでした。

【読書メモ】Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

チームで仕事をするすべての人に向けた本です。
Subversionなどのエンジニアさんが書いた為ソフトウェアよりの話題が多いですが、

  • 人にヤル気になってもらう方法
  • プロジェクトのお邪魔虫の追い出し方
  • 優秀な人の集め方

等々……多分プロジェクトの仕事をする人なら誰でもいくつか活かせる知見が見つかるんじゃないかなと。

モーダル画面をHTML記法で

実際のところ

var htmlOutput = HtmlService
    .createHtmlOutput('<p>A change of speed, a change of style...</p>')
    .setWidth(250)
    .setHeight(300);
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, 'My add-on');

Google Docsで文字入力のポップアップを出す

実際のところ

前回と同様、メニューをつくって、
その子要素をクリックするとポップアップが出てくるような例を考えます。

function myFunction() {
  //いまのドキュメントを読み込む
var doc = DocumentApp.getActiveDocument();
//bodyを変数に格納
var body = doc.getBody();

// パラグラフを挿入
body.appendParagraph("A paragraph.");
//改ページを挿入
body.appendPageBreak();
}

function onOpen(e) {
  DocumentApp.getUi()
      .createMenu('My Menu')
      .addItem('My menu item', 'myFunction')
      .addSeparator()
      .addSubMenu(DocumentApp.getUi().createMenu('My sub-menu')
          .addItem('One sub-menu item', 'popmenu'))
      .addToUi();
}

function popmenu(e) {
  var ui = DocumentApp.getUi();
  var response = ui.prompt('名前をいれてね☆', ui.ButtonSet.YES_NO);
  
  if (response.getSelectedButton() == ui.Button.YES) {
    Logger.log('あなたのなまえ、 %s と知ったよ.', response.getResponseText());
  } else if (response.getSelectedButton() == ui.Button.NO) {
    Logger.log('いいえが押されたね');
  } else {
    Logger.log('はいもいいえも押さずに逃げたね');
  }
}

ターゲットの子メニューを選ぶと、こんなポップアップがでてきます。
f:id:shuzo_kino:20180719233929p:plain

今回はなにもせず「×」で閉じてみました。
今回はログを出すだけにしたので、結果はこんな塩梅です。
実際には文中の文字変えたり、画像を差し込んだりする命令を入れることになるかと思います。
f:id:shuzo_kino:20180719233925p:plain

Google Docにアドオンめいた機能をつくる

getUi関数をつかうと、開いているファイルに新規メニューを追加できます。

実際のところ

単純に追加するだけなら、こんな感じ。

function onOpen(e) {
  DocumentApp.getUi()
      .createMenu('My Menu')
      .addItem('My menu item', 'myFunction')
      .addSeparator()
      .addSubMenu(DocumentApp.getUi().createMenu('My sub-menu')
          .addItem('One sub-menu item', 'mySecondFunction')
          .addItem('Another sub-menu item', 'myThirdFunction'))
      .addToUi();

実行すると、新規メニューがでてきます。
f:id:shuzo_kino:20180718235542p:plain

それぞれの機能はaddItem関数の二番目の引数の関数が実行されます。