2016年4月11日月曜日

【お知らせ】新ブログを開設しました!

開設したのは以下のブログです。

『ExcelユーザーのためのGoogleスプレッドシート入門』

Excelでフツーにできることの大部分がGoogleスプレッドシートでもできるようになってきましたが、たまにアレッと思うことがあります。

Googleスプレッドシートに関しては、ネットで調べてみても、まだまだ新しい技術であるため、日本語の情報は少なく、かつ、バイブルとなるような日本語の書籍もありません。

そこで、これから Googleスプレッドシートを始めてみようと思っている方々の参考になるよう、Excelの使い方を復習しながら、Googleスプレッドシートの使い方を紹介してみようという企画です。

ExcelユーザーのためのGoogleスプレッドシート入門

2011年11月26日土曜日

【お知らせ】本ブログが書籍になりました!


このブログをベースにしまして、内容をググッと濃くした書籍が発売となりました。大手書店、または、ネット書店でご購入下さい。宜しくお願い致します。

2011年9月30日金曜日

【業務で使える】今日の予定通知ツール(4)スクリプトの改良


残念ながら、昨日の終日イベントも入ってしまう事が判明しました。

よって、終日イベントに関しては (終了時刻の日付>今日) になっているモノのみ対象とする判定ロジックを入れ、以下のように改良しました。

function mySendEventsToday() {
  var cal = CalendarApp.getDefaultCalendar();
  var ev = cal.getEventsForDay(new Date()); // 残念ながら昨日の終日イベントも入ってしまう
  var mail_to = "[email protected]";
  var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd");
  var subject ="【今日の予定:" + today + "】";
  var body = subject + "\n";
  body = body + "◆終日イベント\n";
  for (var i = 0; i < ev.length; i++) {
    // 終日イベントは (終了時刻の日付 > 今日) になっているモノのみ対象
    if (ev[i].isAllDayEvent() && (Utilities.formatDate(ev[i].getEndTime(), "JST", "yyyy/MM/dd") > today)) {
      body = body + "・";
      body = body + ev[i].getTitle();
      body = body + "\n";
    }
  }
  body = body + "◆時間イベント\n";
  for (var i = 0; i < ev.length; i++) {
    // 終日イベントでないもの(時間イベント)は全て対象
    if (!ev[i].isAllDayEvent()) {
      body = body + "・";
      body = body + Utilities.formatDate(ev[i].getStartTime(), "JST", "HH:mm");
      body = body + " - ";
      body = body + Utilities.formatDate(ev[i].getEndTime(), "JST", "HH:mm");
      body = body + " ";
      body = body + ev[i].getTitle();
      body = body + "\n";
    }
  }
  MailApp.sendEmail(mail_to, subject, body);
}

以上です。



【おまけ】新ブログを開設しました。
『ExcelユーザーのためのGoogleスプレッドシート入門』
Excelはフツーに使えるよという方でも、Googleスプレッドシートを使った時にはアレッと思うことが結構あるものです。そういう方々向けの企画です。


2011年8月16日火曜日

【業務で使える】今日の予定通知ツール(3)イベントの作成

トリガーを作成し、今日の予定メールが夜間に自動的に送られるように設定します。

スクリプト エディタの「トリガー」メニューから「現在のプロジェクトのトリガー...」を選択します。


「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」の部分をクリックします。


「実行」に「MySendEventsToday」、「イベント」に「時間主導型」「日タイマー」「午前 0 時~1 時」を選択して「保存」ボタンをクリックします。


通常は、ここで承認画面が表示されるのですが、前節で既に承認していますので表示されません。×ボタンを押してスクリプトエディタを閉じます。


スプレッドシートにも名前を付けて保存しておきましょう。Googleドキュメントでは、明示的に保存操作を行わなくても、ある程度の時間が経つと「無題スプレッドシート」という名前で自動保存されます。そのような場合は、スプレッドシート名をクリックして名前を変更しておきましょう。



ちなみに、今回の例では、0時57分に以下のメールが届きました。


以上です。


【業務で使える】今日の予定通知ツール(2)スクリプトの作成

Googleドキュメントの「新規作成」メニューから「スプレッドシート」を選択します。

新規のスプレッドシートが開いたら「ツール」メニューから「スクリプト エディタ...」を選択します。


スクリプト エディタに、以下のスクリプトを入力します。
(コピー&ペーストした方が楽です。)
function mySendEventsToday() {
  var cal = CalendarApp.getDefaultCalendar();
  var events = cal.getEventsForDay(new Date());
  var mail_to = "[email protected]";
  var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd");
  var subject ="【今日の予定:" + today + "】";
  var body = subject + "\n";

  for (var i = 0; i < events.length; i++) {
    body = body + "・";
    body = body + Utilities.formatDate(events[i].getStartTime(), "JST", "HH:mm");
    body = body + " - ";
    body = body + Utilities.formatDate(events[i].getEndTime(), "JST", "HH:mm");
    body = body + " ";
    body = body + events[i].getTitle();
    body = body + "\n";
  }
MailApp.sendEmail(mail_to, subject, body);
}
【注意】
[email protected]」にはご自分のメールアドレスを設定して下さい。

フロッピーディスクのマークをした「保存」ボタンを押し、名前を付けて保存します。



ちゃんと動くかどうか試してみましょう。三角印の「選択した関数を実行」ボタンを押してスクリプトを実行します。


メールを送信したり、カレンダーを読み取るスクリプトの実行には承認が必要ですので「承認」ボタンを押します。


また、スクリプトからGoogleカレンダーにアクセスするためには、カレンダーを読まれるアカウントでの許可が必要です。今回は、既にログインしているユーザー自身のカレンダー読み取りですので、そのまま「アクセスを許可」ボタンを押します。


承認や許可を行った時は、スクリプトは実行されませんので、もう一度、三角印の「選択した関数を実行」ボタンを押してスクリプトを実行します。


Googleカレンダーに登録したイベントが以下のようなメールとして届けば、スクリプトは正常に動作しています。


【参考にしたサイト】
Calendar Services > Class CalendarApp > method getEvents(startDate, endDate, optStatus)
http://code.google.com/intl/ja/googleapps/appsscript/class_calendarapp.html#getEvents
Calendar Services > Class CalendarApp > method getEventsForDay(date)
http://code.google.com/intl/ja/googleapps/appsscript/class_calendarapp.html#getEventsForDay
Utilities Services > Class Utilities > method formatDate(date, timeZone, format)
http://code.google.com/intl/ja/googleapps/appsscript/class_utilities.html#formatDate

【ハマった個所】
Googleのサイトの例は、以下の通りでした。

Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");

上記から分かることは、グリニッジ標準時に変換するのであれば、GMT(Greenwich Mean Time)を指定しなさいという事。では、日本時間に変換したい場合はどうすればいいのでしょうか。参考にしてサイトでは一切触れていません。こんな時は、調べるよりも試してみる方が早いですね。一般に、日本標準時は世界標準時より9時間進んでいるため「+0900(JST)」のように表示されます。JSTとは Japan Standard Time の略。そこで、GMT の部分をとりあえず JST に変更して試してみたら見事に日本時間に変換されました。



【おまけ】新ブログを開設しました。
『ExcelユーザーのためのGoogleスプレッドシート入門』
Excelはフツーに使えるよという方でも、Googleスプレッドシートを使った時にはアレッと思うことが結構あるものです。そういう方々向けの企画です。


【業務で使える】今日の予定通知ツール(1)ツールの概要

今日の予定通知ツールは以下のような構成になっています。


トリガーによって、毎晩、スクリプトが実行され、Googleカレンダーに登録された今日の予定を読み取ってメール送信します。

このツールは以下の手順で作成します。
1.スクリプトの作成
2.トリガーの作成


では、実際にスクリプトの作成から始めましょう。


2011年8月15日月曜日

【業務で使える】セミナー申込管理ツール(9)リマインドメール②

前節で作成したリマインドメール送信スクリプトを実行してみましょう。

スクリプトを保存した後、セミナー申込のスプレッドシートを一旦閉じてから開き直して下さい。(変更したonOpen関数を実行するためです。)


「拡張」メニューから「リマインドメール」を選択します。



申込をした方々に、以下のようなリマインドメールが送られます。


以上です。