goo blog サービス終了のお知らせ 

白牙隊A2屯所

びゃくがたいあにぃとんしょ

Google Apps Scriptで日付や時刻の表示を操作するUtilities.formatDate()が便利

2014-07-11 | パソコン
スプレッドシートに入力された日付などをGoogle Apps Scriptから取得すると非常に長い(詳しい)表記になっています。これらの表示の変更には「Utilities.formatDate()」という便利なものがありましたのでご紹介。

Class Utilities - Google Apps Script ? Google Developers
This service provides utilities for string encoding/decoding, date formatting, JSON manipulation, an...


なにやら色々できちゃうこのUtilitiesという奴ですが(zipやらCSVやら魅力的な語句が並びますねぇ・・・)、その中に時間の表示変更機能もありました。

単純にスプレッドシートに入れた時間や日付をそのまま使うと

Tue Jul 01 2014 11:55:02 GMT+0900 (JST)


という様な詳しい表示になります。

普通に、javascript的に

hoge.getMonth()+1;

とかやってもいいんですが、このUtilitiesというのも便利でしたよ。ヽ( ´ー`)ノ

Java風表記??曜日は要注意



どうやらこのUtilities.formatDate()の表記はJava的な表記法がそのまま使用出来る様です。
GoogleのヘルプサイトにはOracleへのリンクが張ってありました。
SimpleDateFormat (Java Platform SE 6)
SimpleDateFormat is a concrete class for formatting and parsing dates in a locale-sensitive manner. ...


↓日本語だとこの辺でしょうか
SimpleDateFormatクラス - JFormattedTextFieldクラス - Swing
SimpleDateFormatクラスはDateFormatクラスの実装クラスで、より細かいフォーマット方法を指定できます。まず下記のクラス図を見てください。コンストラクタは4つ用意されています。コン...



端的にいえば

Utilities.formatDate( 時間の入ってる変数 , タイムゾーン ,表示のフォーマット);


という感じの様です。この「表示のフォーマット」の記述がJava的な感じだ、と。

よく使いそうなものを実際やってみましょう。

まずは、基本のJavaScript的な表記。もちろん問題なく使えます。
例として、表示中のアクティブなスプレッドシートの2行目6列(F2セル)に「7/7」と日付が入力してあるとします。

function timeUtil() {
var sheet = SpreadsheetApp.getActiveSheet();
// 日付を取得 2行目6列
var hiduke = sheet.getRange(2,6).getValue();
Logger.log("hiduke →" + hiduke);
//javascript的に
var jsyear = hiduke.getFullYear();
var jsmonth = hiduke.getMonth()+1;
var jsdate = hiduke.getDate();
Logger.log(jsyear + "年" + jsmonth +"月" + jsdate + "日");
};


Image


問題なく使えます。
逆に、月や日にちで分岐する、などはこちらの方が便利かもしれませんね。

同じ表記をUtilities.formatDateでやってみましょう。
Utilities.formatDate(hiduke, "JST", "YYYY'年'MM'月'dd'日'");
function timeUtil2() {
var sheet = SpreadsheetApp.getActiveSheet();
// 日付を取得 2行目6列
var hiduke = sheet.getRange(2,6).getValue();
Logger.log("hiduke →" + hiduke);
//YYYY年MM月dd日
var uHiduke = Utilities.formatDate(hiduke, "JST", "YYYY'年'MM'月'dd'日'");
Logger.log(uHiduke);
};


Image_2

ちょこっと短くなりましたでしょうか。
表記のフォーマット関連全体が「""」でかこんでありまして、単位などを使用する場合はさらに「''」で囲んで使用します。
「JST」は日本標準時、ですね。
10の位の表示が異なります。

英語表記でしたらそのまま曜日も使えます。
Utilities.formatDate(hiduke, "JST", "YY'/'MMMMM'/'dd' 'EEEE");
function timeUtil3() {
var sheet = SpreadsheetApp.getActiveSheet();
// 日付を取得 2行目6列
var hiduke = sheet.getRange(2,6).getValue();
Logger.log("hiduke →" + hiduke);
//YY / MMMMM / dd EEEE
var uHiduke = Utilities.formatDate(hiduke, "JST", "YY'/'MMMMM'/'dd' 'EEEE");
Logger.log(uHiduke);
};


Image_3


「M」や「E」の数を減らすと、省略形(?)も使えます。ちょっとおしゃれですね。

日本語風の曜日表示にする際は、よくある配列からもらう感じになりますでしょうか。
その際注意が必要なのは、Utilities.formatDateでは
月曜は1を返して、日曜は7になる点です。
Javascript的には0が日曜の印象がありますが、ここは異なっています。

Utilities.formatDate(hiduke, "JST" , "u");
function timeUtil4() {
var sheet = SpreadsheetApp.getActiveSheet();
// 日付を取得 2行目6列
var hiduke = sheet.getRange(2,6).getValue();
Logger.log("hiduke →" + hiduke);
myTbl = new Array("日","月","火","水","木","金","土","日");
//YYYY年MM月dd日u曜日
var uHiduke = Utilities.formatDate(hiduke, "JST", "YYYY'年'MM'月'dd'日'");
var myDay = Utilities.formatDate(hiduke, "JST" , "u");
myMess2 = myTbl[myDay] + "曜日";
Logger.log(uHiduke + " " + myMess2);
};


Image_4


"u" というフォーマットが曜日を1~7で返してくれます。それを使用して曜日の日本語表記を配列から取り出す、良くあるテクですね。

曜日が日本語表記で取り出せれば完璧だったのですが、それでもただ「日付表記を整えたい」程度でしたら、便利なのではないでしょうか。


GoogleドキュメントにURLから値を渡す

2014-07-02 | パソコン
GoogleドキュメントとスプレッドシートにはiOS版アプリがありますが値を渡すURLスキームは今のところ不明です。
IFTTTではドキュメントとスプレッドシートに追記することができますが、トリガー側の指定した情報だけです。場合によってはURLが「http://ift.tt/~」と短縮されてしまうこともあります。
ここは逆に考えて、受け取る側をカスタマイズしてみるというのはどうでしょう?Google Apps Scriptの「ウェブアプリケーションとして導入」機能には、値を受け渡してスクリプト内部で使用する仕組みがあります。
これを仕込んで、より自分好みの形で情報を集めてみてはいかがでしょうか。

URLの後ろに値を追記



まずは例として、単純に渡した値を画面に表示させるとしましょう。
前にも書きましたが、基本はdoGetという関数をreturnさせるという感じです。

Content Service - Google Apps Script ? Google Developers
When a script is published as a web app, the special callback functions doGet()and doPost() are invo...


RSSやJSONを返す事も出来るそうです。いずれは使いこなしたいものです・・・σ(^_^;)

値を受け渡すにはまず、doGet関数を書いて、それを「ウェブアプリケーションとして導入」してURLを作っておきます。
そのURLにキーと値を追記していく、という感じになります。

doGet関数に値を渡すとその値は「.parametersオブジェクト」に入る様です。・・・イマイチ情報が少ないのであれですが・・・。

例えば、前述のリファレンスサイトの様に「start」というキーで値を渡したとすれば

hoge.parameters.start


という感じで使用出来るわけですね。
startとendというキーを受け取ってそれらを画面に表示する、とすると

function doGet(request) {
var start = request.parameters.start;
var end = request.parameters.end;
Logger.log("request.parameters = "+JSON.stringify(request.parameters));
var result = "取得した値\n" + "start = " + start + "\n" + "end = " +end;"
return ContentService.createTextOutput(result);
}


こんな感じ。

こいつを「ウェブアプリケーションとして導入」して得たURLの末尾に「?」をつけてそのあとに「キー = 値」という感じでバンバン追記して行くわけです。

ウェブアプリケーションとして導入して得たURLの後ろにstartキーとendキーを記載すると

https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec?start=1111111&end=6666666


こんな感じ。「?」の後がポイントです。
このURLにアクセスすると・・・


見事にGoogleドライブ側に渡せました!

Image




後はアイディア次第!



後はアイディア次第、という事になるでしょうか。
それこそGoogle Apps Script は様々なGoogleのサービスを扱う事ができますので。

例えば、やることも値として渡して、それで分岐させるというのはどうでしょう?


  • 「dogetというキーが"text"だった場合は「inBox」というドキュメントに追記」

  • 「dogetというキーが"todo"だった場合は「TODO」というカレンダーに終日予定を追加」



などなど・・・。お好みの関数を用意しておいて起動URLへ渡す値で振り分け・・・とか。
まぁ、カレンダーなら専用のカレンダーアプリ使った方が安心ですが、ドキュメントやスプレッドシートはちょっと便利・・・かな?

今回は、
「dogetというキーが"text"だった場合はstartというキーの値を、URLで指定したドキュメントに追記して日付も次の行に入れる。」

としてみました。

スクリプトを書く→URLを作成



まずは適当なスプレッドシートやドキュメントのスクリプトエディタにスクリプトを書きます。
追記したいドキュメント、あたりが無難でしょうか。今回は追記するドキュメント自体にスクリプトも書いてしまいます。

任意のドキュメントを作成しましたら、「ツール」「スクリプトエディタ」を選んでスクリプトエディタを開きます。

Scriptediter01
▲スクリプトエディタを開きます。

最初は何か聞かれますが、「空のプロジェクト」で良いと思います。
例としてのスクリプトがありますがそこにスクリプトをコピペします。

Karanoproject02
▲「空のプロジェクト」を選びます。

Scriptharituke03
▲スクリプトをコピペします。

function doGet(request) {
var start = request.parameters.start;
var end = request.parameters.end;
var doget = request.parameters.doget;
if ( doget == "text" ) {
var result = addText ( start );
return ContentService.createTextOutput(result + " を追記しました。");
};
var result = "取得した値\n" + "start = " + start + "\n" + "end = " +end;
return ContentService.createTextOutput(result);
}
function addText( text ){
var dd = new Date();
//ドキュメントに追記
var doc = DocumentApp.openByUrl('https://docs.google.com/document/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit');
var body = doc.getBody();
body.appendParagraph( text +"\n" + dd);
return text;
};

▲私のスクリプトはこんな感じです。

先ほどのドキュメントのタブに戻りまして、追記したいドキュメントのURLをコピーして、スクリプト下部にある
DocumentApp.openByUrl('https://docs.google.com/document/d/xxxxxxxxxx/edit');

と差し替えます。(このURLのドキュメントに追記できます。)

Docurl04
▲URLをコピー!

それを「ウェブアプリケーションとして導入」します。
「公開」「ウェブアプリケーションとして導入」を選びます。

Webapp05
▲ウェブアプリケーションとして導入!

最初はバージョン番号を入れる必要があるので、「1」とでも入れておきます。
公開範囲は自分しか使用しませんので自分だけでいいと思います。
そうすると起動用のURLが作成されます。これをコピペして使用しましょう。
そのURLにキーを追記して好きなアプリからアクセスするだけです。

Jibundake06
▲バージョン番号や公開範囲を入れます。

Urlsyutoku07
▲起動用のURLが無事できました!

どうでしょう、何となく流れがつかめましたでしょうか?

例えば、コピーした内容をドキュメントに追記



後は送る側のアプリを選んだり、ある程度成形して渡せばよいのではないでしょうか?
例えば

コピーした内容をドキュメントに追記したい

という場合。
クリップボードにアクセスできるアプリを選べばいいわけです。今回はランチャー系アプリのSwipemintにしてみました。

Swipemint - シンプルな最速ランチャー 2.0.2
分類: 仕事効率化,ユーティリティ
価格: ¥100 (Yusuke Tsuji)



Swipemintの場合はクリップボードにアクセスする際は「_clipboard_」という表記がいい様です。

先ほど作ったURLに「?」をつけてその後に値を追記して行きます。

https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec?doget=text&start=_clipboard_


後は好きな文字をコピペしてこのURLにアクセスすればおっけー!

コピーして・・・

Image_2
▲追記したい文字をコピー!

スワイプ!

Image_3
▲Swipemintから送ります

はいきたー!

Image_4Image_5
▲画面には完了した旨のコメントを出します。ドキュメントにも追記されてます。

Googleをより楽しく



やはりインターネットがあればどこでも使用出来るGoogleのサービスは便利ではないでしょうか?

それをより自分好みの物へカスタマイズ出来るGoogle Apps Script

今回は「iPhoneから手軽に追記したい」
をテーマに考えてみました。

みなさんはどんな感じでGoogleのサービスを利用していますでしょうか?

これを機に
「もっとこうならいいのに」
というのを洗い出してみませんか?

ひょっとしたらそれは

Google Apps Script でより便利に出来るかもしれませんよ







スプレッドシートからGoogleカレンダーへ予定を一括登録する

2014-06-30 | パソコン
GoogleカレンダーにはUTF-8のCSVファイルで予定を一括登録する機能がありますが、この「UTF-8のCSVファイルを作成」というのが意外に面倒です。
そこで、Google Apps Script の勉強もかねて、スプレッドシートから一括登録するスクリプトを作成してみました。
・・・結局、データベース的な表は作らなくちゃダメなんですけどねヽ( ´ー`)ノ

自分用という事で少し用途を絞りまして、終日の予定として「日付」と「タイトル」と「説明」を入力出来る様にしてみました。

A1セルから始めていただいて、1行目に項目、2行目以降にデータを記載。
項目の順番は変えても大丈夫ですが、名称は「日付」「タイトル」「説明」と記述する必要があります。

メニューに「カレンダーへ追加」というのを追加してみましたので、そちらから「終日予定登録」を選択すると関数が実行されて、表に記載した内容が一括登録されます。

配列にオブジェクトを並べる



今回は色気を出しまして、データベースの値をJSONにしてみる、というのをマネしてみました。

Google Apps Script で spreadsheet のデータを JSON として読み込む - プログラマってこんなかんじ??
Android アプリに限らず、JSON データを表示するようなアプリって作ること多いですよね。で、自分はその時いつもサーバサイド作るのがめんどくさくなっちゃう。なので、spreadsheet のデータをそのまま JSON として返すようなサーバーサイドアプリを GAS(Google Apps Script) で書いてみま...


今回はただ順番にカレンダーへ登録するだけなので別に必要ないかなぁとも思いますが、引用したサイトの様にJSON化できると色々広がりそうですよね。

このdai4649氏のスクリプトは初めみた際何がなんだかよくわかりませんでした。正直なところ。

オブジェクトの名前[キーが入った変数[j]] = データが入った変数[j]


という記述のループでJSON化されているのに気づいた際の感動たるや!ヽ( ´ー`)ノ

・・・カッコイイ・・・。自分では絶対思いつかない書き方です。

恐らくですが、タイトル部分とデータ部分を行ごとに別々に配列としておき、タイトルの個数分繰り返して頭から少しずつオブジェクト化、それらの塊をまた配列にしている・・・ってことなんじゃないかなぁ(自信ありませんが)

このdai4649氏のJSON化のところをコピペさせていただき、その後ろにGoogleカレンダーへ予定を登録するスクリプトを加えました。

(JSON化したはいいが、値を取り出す知識が足りずに苦戦したのは内緒ですσ(^_^;))

スプレッドシートのメニューから関数を実行する



今回はそれに加えて、操作がわかりやすい様に、スプレッドシートのメニューに関数実行を埋め込んでみました。

これはおなじみの掌田津耶乃氏のスクリプトのコピペです。

仕組みとしては、
「スプレッドシートを開いた際に実行される関数にメニュー追加の命令を実行させる」
という感じでしょうか。これで、あたかも初期からあるメニューの様に見えますので、慣れていない方が操作する際もあまり迷わない・・・かな?
(一応、パソコン詳しくない方でも出来る様にという趣旨です。)

スクリプトの実行とイベントハンドラ(5/5):初心者のためのGoogle Apps Scriptプログラミング入門
Googleドキュメントのスプレッドシートでは、メニューバーをスクリプトでカスタマイズすることができます。独自のメニューを追加し、そこからスクリプトを呼び出すように設定することが可能なのです。これを...


念の為のdoGet関数でiPhone用起動URLも



以前書いた様に、今回もウェブアプリケーションとしてURLを取得してみました。

その際はスプレッドシートは開いた状態でスクリプトが動くわけではないので
スプレッドシートをURLで指定する「SpreadsheetApp.openByUrl」を使用しています。
ここで言う、URLというのは、スプレッドシートシートをブラウザで開いた際のあの長ったらしいURLですね。

var URL_BOOK = 'https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=0';
var SHEET_NAME = 'カレンダー登録';
function doGet(e) {
var url = URL_BOOK;
var sheetName = SHEET_NAME;
var book = SpreadsheetApp.openByUrl(url);
var sheet = book.getSheetByName(sheetName);
// {hoge : 'fuga'};
var json = convertSheet2JsonText(sheet);
//return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON);
return ContentService.createTextOutput('「終日予定登録」を実行しました。');
}
function onOpen(e){
var arr = [
{name: "終日予定登録", functionName: "convertSheet2JsonText"}
];
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.addMenu("カレンダーへ追加", arr);
}
function convertSheet2JsonText(sheet) {
var url = URL_BOOK;
var sheetName = SHEET_NAME;
var book = SpreadsheetApp.openByUrl(url);
var sheet = book.getSheetByName(sheetName);
// first line(title)
var colStartIndex = 1;
var rowNum = 1;
var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn());
var firstRowValues = firstRange.getValues();
var titleColumns = firstRowValues[0];
Logger.log("titleColumns = "+titleColumns);
// after the second line(data)
var lastRow = sheet.getLastRow();
var rowValues = [];
for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) {
var colStartIndex = 1;
var rowNum = 1;
var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn());
var values = range.getValues();
Logger.log("values = "+values);
rowValues.push(values[0]);
Logger.log("rowValues = "+rowValues);
}
// create json
var jsonArray = [];
for(var i=0; i < rowValues.length; i++) {
var line = rowValues[i];
var json = new Object();
for(var j=0; j < titleColumns.length; j++) {
json[titleColumns[j]] = line[j];
Logger.log('titleColumns[j]='+json[titleColumns[j]]);
Logger.log("JSON = "+JSON.stringify(json));
}
jsonArray.push(json);
var logg = "日付→" + jsonArray[i].日付 + "題名→" + jsonArray[i].タイトル + "説明→" + jsonArray[i].説明;
Logger.log(logg);
}
//カレンダー操作
var calsheet = book.getSheetByName("カレンダー名");
var calName = calsheet.getRange(2,1).getValue();
var cals = CalendarApp.getCalendarsByName(calName);
var cal = cals[0];
for(var i=0; i < rowValues.length; i++) {
var body = jsonArray[i].説明;
var str = jsonArray[i].タイトル;
var dd = jsonArray[i].日付;
cal.createAllDayEvent(str, dd,{description: body});
};
return jsonArray;
}</pre>

複数シートからそのままカレンダーへ



恐らく、「一括で予定を登録したい!」という際は頭からポチポチ予定を入力、というよりは他に元となる情報がある事が多いのではないでしょうか?(好きなチームの年間スケジュールが発表された、など)

そうした元データから加工や参照してデータベースを作成した後、従来のUTF-8のCSVファイルを使用する場合はそのシートだけを取り出して保存し直す必要がありました。

その手間を省けるのは結構よいのではないかな、と思います。編集中のスプレッドシート以外は見に行っていないスクリプトですので、複数シートがあっても問題ありません。

職場などで一括登録したい予定に何か決まったフォーマットがあるのであれば、それ様にチューニングするってのもありですね。
それを別シートに貼り付けて参照からデータベース化する、とか。

また、カレンダーに関しても今回は「説明」を登録しましたが、その他にも場所や参加ユーザーに関するパラメータも用意されていますし、もちろん終日ではなく開始と終了の時間を指定してスクリプトを書く事も出来ますので、気になった方はリファレンスのページをご覧になってみてはいかがでしょうか?


Class Calendar - Google Apps Script ? Google Developers


UTF-8のCSVファイルで登録したい方はこちらがわかりやすいですよー。

Excelで作ったスケジュールをGoogleカレンダーに一括登録する ― 阪神タイガース2013年の試合日程など | ちょっとした人だかり - Part 2

参考にしたサイト
JavaScriptで覚えておくとよいデータ構造 - 配列・オブジェクト - いろいろ解析日記




Google Apps Scriptの関数を好きな時に実行するURL

2014-06-25 | パソコン
Google Apps Scriptには「ウェブアプリケーションとして導入」という機能があります。これを使えば「そのURLにアクセスすることでスクリプトを実行する」という事ができます。
今回は簡単に「関数を実行して文字列を表示する」という事をやってみました。

先日、
「メールに予定を書き込んで自分宛てに送信するとGoogleカレンダーに終日の予定が登録される」
という関数を作成しましたが、関数の実行はあらかじめ指定していた時間だけでした。
もちろん時間が来れば自動で実行されるのも便利ですが、
「好きな時に関数を実行できれば・・・」
と思い色々調べて見たところ、どうやら「ウェブアプリケーションとして導入」という機能がよさそうです。

これがまたクセがあって未だによくわからないのですが、
doGetという関数名にする。
必ずreturnさせる
というのがポイントのようです。

returnと言われても・・・というのが私の技術力では、正直なところなんですがσ(^_^;) 素直にヘルプページにあった'Hello, world!'スクリプトをコピペしてみました。

Content Service - Google Apps Script ? Google Developers
When a script is published as a web app, the special callback functions doGet()and doPost() are invo...


前回作ったスクリプトの関数名を

「doGet」に変えて、最後にreturnで、文字列を表示する命令(?)らしい
「ContentService.createTextOutput」
を加えただけです。

どうやらこいつ(ContentService.createTextOutput)はRSSやJSONも出力出来るみたいですね。技術力いかんではかなり凄い事が出来るのではないでしょうか。

URLの作り方



私も手探り状態なのであれですが、スクリプトができましたら「ウェブアプリケーションとして導入」機能を使ってみましょう。

スクリプトエディタ画面から
「公開」「ウェブアプリケーションとして導入」
へと進みます。
「プロジェクトバージョン」
は何でもよいので「1」とでも入力し
「次のユーザーとしてアプリケーションを実行」で「自分」を選び
「アプリケーションにアクセスできるユーザー」は「自分だけ」
にしてみました。

この辺りはもう少し勉強が必要な気がしています。

Webapp_2
▲バージョン適当な数字を

そうしますとURLが表示されますので、ここにアクセスすれば関数が動く、という塩梅です。

Webappurl_2
▲URLをコピーして使用します。

ちなみに、公開後にスクリプトを修正した際は

「ファイル」「版を管理」から「新しいバージョンを保存」を選んで保存をしてから、再度そのバージョンでURLを作成すると良いようです。

Shinver_2
▲バージョン管理をしないと古いままです。

今回は
「お昼回し」という題名のメールをカレンダーに登録するスクリプト。
最後方のreturnがポイントのようです。

function doGet() {
var thds = GmailApp.getInboxThreads();
var calName = "お昼回し";
var cals = CalendarApp.getCalendarsByName(calName);
 //var str = "お昼回し";
for(var n in thds){
var thd = thds[n];
var subject = thd.getFirstMessageSubject();
var msgs = thd.getMessages();
if (subject.indexOf("お昼回し",0) != -1){
//label.addToThread(thd);
// for(var m in msgs){
var msg = msgs[0];
var body = msg.getPlainBody();
var str = msg.getSubject();
var res = str.match(/\d+/g);
//sheet.getRange(1,8).setValue(body);
cal = cals[0];
      var d1 = new Date();
var yy = d1.getFullYear();
var dd = new Date(yy,res[0]-1,res[1]);
      //var d2 = new Date();
      //d2.setHours(d2.getHours() + 1);
cal.createAllDayEvent(str, dd,{description: body});
//}
GmailApp.moveThreadToArchive(thd);
}
}
return ContentService.createTextOutput('「お昼回し」を実行しました。');
//return
}


私はURLをアイコンにしてみました。
左下の「doGet」アイコンをタップすると・・・

Image
▲Googleスクリプト起動!

無事アクセスできました。

Image_2
▲文字が表示されて完了をお知らせします。

これでiPhoneからも、Google Apps Scriptの関数を実行できますね!

URLをアイコンにするのには定番アプリの
これなどはどうでしょう?

Touch Icon Creator 4.2
分類: ユーティリティ,仕事効率化
価格: ¥100 (Makoto Setoh)



次は
「複数の予定をスプレッドシートから一括登録」とか
してみたいですねぇ・・・ヽ( ´ー`)ノ



Gmailの件名と本文を引用してGoogleカレンダーに予定を登録する。

2014-06-22 | パソコン
GmailやGoogleカレンダーはIFTTTにも連動していますが、イマイチ使いにくい印象です。
ただ普通に「メールが来たらその件名と内容を終日の予定に入れておきたい」という様な場合はIFTTTでは無理なので、Google Apps Scriptに挑戦してみました。

Google Apps Scriptは起動する手段の情報が少ないです。
今の所わかったのが

  • 手動

  • シートを開いたり編集した時

  • フォームの送信時

  • 時間を指定



あたりです。英語版だともう少しある様なんですが・・・。

今回は、メールのチェックなので時間を指定して1日1回実行する事にしました。

パソコンからスプレッドシートで記述



Google Apps Scriptはパソコンからが便利です。
残念ながらiPhone版のアプリからは無理そうです。

まずは適当な名前でスプレッドシートを作ります。
画面上部のメニューから「ツール」「スクリプトエディタ」と進みます。

Scriptediter

初回は色々聞かれますが、どれでも大丈夫でしょう。
最初は例文がありますが消してしまって、そこにスクリプトを書くわけです。

書き終わりましたら、「フロッピーディスク」マークで保存。「??」マークで実行、みたいな感じです。

今回は、時間を指定して実行しますので、「トリガー」という機能を使用します。

スクリプトエディタ画面のメニューから「リソース」「現在のプロジェクトのトリガー」からトリガーを新しく作ります。

Jitimer

関数名とどういう条件かを選んで行く感じですね。

最初の実行時はカレンダーへのアクセスを許可するか聞かれてきます。

Shonin


今回のスクリプト



今回のスクリプトは私用のものなのであれなんですが、

受信トレイに対して
「本日の予定」という文字列が件名にあるメールを検索して
件名を予定のタイトル、本文を予定の説明に引用して終日の予定を
「本日の予定」という名前のカレンダーに登録し
アーカイブします。

あとは、自分あてに
「6/22(日)本日の予定」
とかを件名にしてメールすればOKです。
数字の塊の1つ目を月、2つ目を日にちとして引用します。


function setCalLab(){
//var dstr = "本日の予定";
//var label = GmailApp.createLabel(dstr);
var thds = GmailApp.getInboxThreads();
var calName = "本日の予定";
var cals = CalendarApp.getCalendarsByName(calName);
for(var n in thds){
var thd = thds[n];
var subject = thd.getFirstMessageSubject();
var msgs = thd.getMessages();
if (subject.indexOf("本日の予定",0) != -1){
//label.addToThread(thd);
//for(var m in msgs){
var msg = msgs[0];
var body = msg.getPlainBody();
var str = msg.getSubject();
var res = str.match(/\d+/g);
cal = cals[0];
var d1 = new Date();
var yy = d1.getFullYear();
var dd = new Date(yy,res[0]-1,res[1]);
cal.createAllDayEvent(str, dd,{description: body});
//}
GmailApp.moveThreadToArchive(thd);
}
}
}


基本的な仕組みは掌田津耶乃氏のスクリプトのコピペです。

初心者のためのGoogle Apps Scriptプログラミング入門
「Google Apps Script」は、Googleが提供するサーバーサイド・スクリプト環境です。Googleスプレッドシート、Gmail、Googleカレンダー、Googleマップ、Google...


for~in文で順番に見ていくのがちょっと理解しきれていないのですが、正規表現を初めて使用して上手く行ったのでよかったです。

そういえばTwitterのRSS化の時もGoogle Apps Scriptだったようですか・・・
中々難しそうですねぇ。

#ブロネク ハッシュタグのRSS





Windows8の「コンピュータを修復する」がかなりパワーアップしていた。

2014-05-13 | パソコン
この度、Windows7環境が3つ入っているパソコンの3つ目をWindows8に変えてみました。
複数台あるので、パーティションを丸ごとコピーする、ということをよくやるのですが、その際CドライブからのBCDの紐付けが切れて修正が必要になることがあります。

そういった際にはwindowsのDVDから「コンピュータを修復する」機能をよく使用します。

今回もそれを使用したのですが、Windows7とはだいぶデザインが変わっていたので(当たり前ですが・・・ヽ( ´ー`)ノ)ちょっと書いておきます。

今回は
C:ドライブ→Windows7
D:ドライブ→Windows7
E:ドライブ→Windows7
F:ドライブ→データ用

というトリプルブートの状態から、E:ドライブへwindows8をコピーする、という作業です。

単純にコピーしただけではC:ドライブからE:への紐付けが切れてしまいます。当たり前ですが、Windows7のDVDではWindows8は修復できませんのでWindows8のものを使用してDVD起動します。

F12キー連打、とかが一般的でしょうかね?

Image_2
▲DVD起動すると確認の文字が出ますので素早くEnterなどを押します。

しばらく待つと見覚えがある画面が。
今回は、インストールではなく左下の「コンピュータを修復する」を選びます。

Image_3Image_4
▲「修復」!!

ここからはメトロなデザインが続きます。
あまりWindows7では見なかった文言が続きますが基本左下ですね。

Image_5Image_6
▲「トラブルシューティング」→「詳細オプション」

自動修復から、紐付けが切れているパーティションを選びます。

Image_7Image_8
▲「自動修復」を選択!

修復できる状態ですと、ホント数秒で終わります。
さらに出来る様になったな、Windows8!!

Image_10

コレでも治らないなら私のようなシロウトには無理レベルですかね。

従来ですと、
このあと、ブートマネージャーが文字化けして、BCDの書き換えが面倒だったのですが、それがない!

これは・・・凄いです。

BCDはシロウトには扱いが難しい代物です。
複数インストールなどは危険度も高い行為ですのでくれぐれも自己責任で行って下さい。

ちなみに私のお気に入りはこちらのサイト様
まさに伝説のサイトですね。
Windows Vistaと旧Windowsとのデュアルブート
...






NICOLA配列 12/06 348文字(10分)

2013-12-07 | パソコン
あれ、気がつけば前回の計測から1か月たってましたね・・・(^^ゞ

ついに300文字クリアしました(*・∀・)=3

これぐらいいければ日常業務は困らないぐらいでしょうか。(私の場合は)
今回は10分で348文字でした!!職場は共用パソコンなのでよく設定解除をし忘れて「キーボードが壊れた!!」と騒ぎになっています。

1205_348

題材にはこちらのサイトの「バスカヴィル家の犬」をお借りしました。

バスカヴィル家の犬(スマートフォン版)

くぅ、早く続きが読みたい!!(*・∀・)=3(NOCOLAでタイプしながら読むルールです。)


NICOLA配列 11/09 269文字(10分)

2013-11-09 | パソコン
NICOLA配列を練習中のアニィです。

だいぶ、キーボード表を見ずに入力できるようになってきました。
ある程度たったら、「見ない」と決めると成長のスピードがますような気がしました。

今回は、10分で 269文字。600文字は行きたいなー。

Nicola269


題材にはこちらのサイトの「バスカヴィル家の犬」をお借りしました。

バスカヴィル家の犬(スマートフォン版)

くぅ、早く続きが読みたい!!(*・∀・)=3(NOCOLAでタイプしながら読むルールです。)


NICOLA配列 10/25 217文字(10分)

2013-10-25 | パソコン
最近、練習しているNICOLA配列。

10/25の計測は

10分間で217文字でした。

Nikora1025

「の」はかなとNICOLA、同じキーなんですね。
比較的、左手担当のキーの方が覚えやすいみたいです、私は。

最近は職場のPCにもこっそり「やまぶきR」入れちゃいました(^^ゞ


題材にはこちらのサイトの「バスカヴィル家の犬」をお借りしました。


バスカヴィル家の犬(スマートフォン版)

くぅ、早く続きが読みたい!!(*・∀・)=3(NOCOLAでタイプしながら読むルールです。)




ローマ字入力よりフリック入力の方が速かった

2013-10-14 | パソコン
NICOLA配列に挑戦中のアニィです。

せっかくなので、それぞれの入力方法で今現在どれくらいの速さなのか計測してみました。

計測方法は単純に、「10分間にwordに何文字打てたか?」を数えました。
気楽にやったので誤差はありそうです。

題材にはこちらのサイトの「バスカヴィル家の犬」をお借りしました。


バスカヴィル家の犬(スマートフォン版)

原文の著作権がすでに切れているのでそれをご自身で翻訳しなおされているすさまじいサイトです。


では、早速!!

かな入力 826文字
Kana826

一番はメインの「かな」でした。
ちょっと安心しました。(^^ゞ


ローマ字入力 535文字
Roma535

さすがに半分とはいきませんでしたが、それでも結構差がつきましたね

NICOLA配列 118文字
Nicola118

始めたばかりなので、かなり遅いです。まぁ、これからどれだけ伸びるか楽しみですね!


最後に、iPhone5でフリック入力をして見ました。
これが意外にいい数字が・・・ヽ( ´ー`)ノ

フリック入力 595文字


Image


あらら・・・。私はローマ字入力が苦手、という結論が出ました。

関連記事
ローマ字入力、かな入力とNICOLA配列




ローマ字入力、かな入力とNICOLA配列

2013-10-06 | パソコン
ローマ字入力、かな入力とNICOLA配列

もともとはかな入力派のアニィです。
現行のかな入力とはまた違う「NICOLA配列」というのを練習しています。

10代の頃に商業高校出身の子が
「ローマ字入力とか意味がわからない」
と言っていたので真似して以来、かな派でした。

が、職場ではPCは共用でして、周りは全員ローマ字派。切り替えが面倒なので
職場はローマ字、自宅はかな
と2種類の入力を使っております。

今回「NICOLA配列」というのに興味が出てきまして、練習中です。
これをマスターできれば3種類の配列に触れることになります。

私が感じたそれぞれの特徴をあげてみます。

ローマ字入力
ローマ字入力の魅力は

  • 「母音」の位置を覚えると何とかなる。

  • 「母音」も比較的押しやすい位置にある。



ではないでしょうか。もちろん覚えるのはアルファベットですので、英語表記もスムーズにタイピングできます。

かな入力
かな入力の魅力は

  • タイピング数が減る。

  • シフトを押しながらで小さい「っ」「ぁ」へ変化するので覚えやすい。

  • 「゛」「゜」キーを押して追加する仕組みなので分かりやすい。



辺りでしょうか?

対して「NICOLA配列」
をやってみて感じたのは


  • かぎかっこ(「」)と読点(、)以外をホームポジションで打てる。

  • 半濁音(ぱぴぷぺぽ)や小さい「っ」「ぁ」も個別に割り振られているので、覚えるべき個数が多い。

  • キーボードを見ても意味がないので見なくなる。



というのを感じました。

かぎかっこ(「」)と読点(、)以外をホームポジションで打てる。


「NICOLA配列」やその他の親指シフトのウリであるのがこの手の移動の少なさ、ではないでしょうか?
親指シフトが他の配列と1番違うのもこの
シフトキーが2個あるので、キーあたり3種類の文字が打てる点にあると思います。

かな入力派の私でも感じてしまうのが
かな入力時の右手小指の担当範囲が広い点ではないでしょうか?
もちろん、エンターキーより内側にはあるので、誰でも入力できるはずではあるのですがそれにしてもやや大変です。
さらに、あ行とや行は1番上の列に固まっているので手の小さい方は辛いかもしれません。

今回試している「NICOLA配列」ではほぼホームポジションの下3列に文字があるのが凄いと思いました。
本当に手を動かしません。

・・・凄いと思います。素直に。

半濁音(ぱぴぷぺぽ)や小さい「っ」「ぁ」も個別に割り振られているので、覚えるべき個数が多い。


かな入力と根本的に違うのが、濁音以外は「シフト押しながら、で変わる」システムが無い点です。
これはもう覚えるしかないので仕方が無いですねぇ。
そもそも「押しながら」すらないですしね。

この、特徴的な「濁音は両手タイピング」はやってみるとわかると思うのですけれども

かなり楽しいです。

楽しいって重要よね。ただ、覚えるのが大変なのは間違いありません。

キーボードを見ても意味がないので見なくなる。


これは、副次的という感じなのですが、専用キーボードが無いため、キーボードを見てもどのキーを押すべきかわからないため、ブラインドタッチをやらざるを得ない、という凄まじい状態になります。

wikiページにキーボードの配列の画像がありますのでそれを表示させて使用しています。
Oyayubi


親指シフト - Wikipedia




タイピングを複数使い分ける必要はあまりないと思いますが、幸運にも3種を練習する機会を得ましたので、比べてみました。

皆さんはどのタイピングがお好みでしょうか?



親指シフトで我々は救われるのか

2013-10-05 | パソコン
親指シフトで我々は救われるのか

会社ではローマ字入力、自宅ではかな入力のアニィです。

以前ブロネクでご一緒した、おおひがしさんが熱く語っていたのが「親指シフト」でした。

ちょこっと気にはなっていたのですが、先日有名ブロガー(?)が使っているという事でしたので、
「しょうがねぇなぁ」
という感じで試してみました。

何からはじめるのか



「親指シフト」は得体が知れません。
情報や専門サイトも物凄くたくさんあるのですが、どのサイトもやや雑多というか、情報過多というか、おしゃれじゃないというか。

困ったら仲間を頼る、ということでおおひがしさんに泣きついてみました。




実は、ここでもよくわからなかった(^_^;)
(ゴメン、おおひがしさん)
しかしながら、どうやら「やまぶきR」というソフトがポイントの様です。

専門用語が多すぎる


良くわからない初心者にとって、困るものの一つに専門用語があるかと思います。
「親指シフト」ではそれがかなり多い。
しかも歴史がある技術であるため、いろいろカスタマイズ・細分化されている印象です。
「指がしゃべる」
という救いは一緒だけれも、そこへと至る儀式が宗派ごとに分かれているような感じでしょうか。

私なりに解釈してみると


  • 「親指シフト」はかな入力の一種。

  • NICOLA配列というのが人気。

  • 理想を言えば専用キーボードを買うのが良い(win7 64bitの方は要注意)。

  • キーボードを交換できない方は「やまぶきR」というフリーソフトがおすすめ。

  • 肝はお使いのキーボードのスペースキーの大きさ(親指で押しやすいキーはあるか、どれが押しやすいか)。

  • Macはスペースキーが長いので、おおひがしさんはさらにカスタマイズした「Orz配列」というものを使用している。




という感じでしょうか。

幸運にも職場のデスクトップと自宅のノートPCはスペースキーの大きさが似ているのでどちらでも「NICOLA配列」というのが使えそうです。

どちらもwindowsのPCなので「やまぶきR」を無事インストールすることができました。
どうやら、フォルダごと削除すればアンインストールできる様です。安心ですね。

やまぶき作ってます
やまぶきR Ver. 1.9.0をリリースします。・実行中のやまぶきRに対して外部から終了や一時停止を行う機能を追加しました...


Image
▲スペースキーが短いので、左手シフトをスペース、右シフトを変換キーに割り振りました。

「やまぶきR」はそのままでは使いにくいです。
こちらのサイトのおおひがしさんのアドバイスが参考になりました。

setting yamabuki
定義ファイルは NICOLA.yab親指シフトキーは「左・右」を設定する。ただ、Winキーボードは「左:スペース」「右:変換」の設定になるかも同時打鍵の速度調節は、初めうちは変えず慣れてからにした方が...


ようやくスタートラインです∠( ̄へ ̄)
さて、どうなる事でしょうか?

親指シフトには種類が多い、やまぶきRは初期設定では使いにくい、あたりがハマりポイントでした。




Vistaから共有したVistaのファイルを見るたびにユーザー名とパスワードを聞いてくる

2012-09-10 | パソコン
Vistaから共有したVistaのファイルを見るたびにユーザー名とパスワードを聞いてくる

この度、職場の共有ネットワーク内のPCがXPからVistaに変更になった(PC3とします。)のですが、その際表題の症状が出ました。
追加したPC3からもともとあるVistaのパソコン(PC1)の共有フォルダを見る際にユーザー名とパスワードの入力を求められる

あーでもないこーでもないといろいろ変更したのでやや記憶があいまいですが、

・一度入力すれば一日大丈夫だが、再起動するたびに入力を求められる。

・追加したPC3とのぞかれる側のPC1どちらも「ネットワークと共有センター」でファイル共有を「有効」であるのはもちろん「パスワード保護の共有を無効にする」になっているがパスワードを聞かれる。

・PC3にはログインのパスワードが設定されていない。(←たぶんこれが原因)

・PC3にユーザーログインのパスワードを設定すると症状が消えるが、起動時に別のアカウントにログインしようとして「パスワードが違います」と勝手にでるので気味が悪い。(PCに詳しくない人もいるので毎朝説明するのは面倒)

・別の管理者権限ユーザーを作成し、PC3のユーザーを消してもその「パスワードが違います」が出る。消したはずのユーザーが残っている。

・ローカルセキュリティポリシー([スタート]⇒[コントロールパネル]⇒[システムとメンテナンス]⇒[管理ツール]⇒[ローカルセキュリティポリシー])で「対話型ログオン:最後のユーザー名を表示しない」を有効にして対話型ログオンをしようとしても消したはずのユーザーにログインしようとして「パスワードが違います」と勝手にでる。



…。後半からは別の症状(パスワードが違います)も出始めめんどくささ満点…。確証はありませんが、Vistaのインストール時にパスワードを設定していないのが原因の一端臭いが…。
ということで、どーしたものかと思っていたのですが、発想の転換!!
ネットワークパスワードの管理という機能を使用してみました。
ユーザーアカウントの左にあるタスクから「ネットワークパスワードの管理」を選択

Photo_2


そこで、ユーザー名パスワードの保存ダイアログボックスからパスワードを入力してしまうわけです。おそらくはこれ、IEに保存されたパスワードなどを管理するようなんですが、共有にも使用できました。
ログオン先には
「¥¥○○○(共有したいPC名)」
ユーザー名と、パスワードはアクセスの度求められていた例のパスワードを入力したところ無事解決しました~

Photo_3

一時はどうなるかと思いましたが、なんとか快適な共有環境を設定できました。

追伸
後半に遭遇した「パスワードが違います」現象。他の方も苦労されているみたいですね。。。
参考ページ
http://vista.pasokoma.jp/c_405658