相変わらず、Google Apps Scripts (GAS) の話題です。
Google Spreadsheets は便利ですが、
Excel で出来たことが標準関数として用意されていないことが
たまにありますね。
エンジニアとして
ないものは、作るしかないですね。
■ やること
今回は、ExcelでいうPHONETIC関数です。
といっても、Spreadsheets にはフリガナという概念を持っていないので
漢字の読みをカタカナで~ということは難しそうです。
…さて、
全角ひらがな⇒全角カタカナ
全角英数 ⇒半角英数
が変換できればいいかなーといったゴールにします。
■ functionを定義する
幸い?シートからユーザー定義関数が呼び出せるとところはExcelと同じなので、
渡されたセル内の文字をコード変換してあげればいいかなーって感じですね。
ツール⇒スクリプトエディタで下記のfunctionを定義してあげます。
/**
* ひらがな⇒全角カタカナ, 全角英数⇒半角英数
*/
function phonetic(args) {
if (typeof args == "string") {
// ひらがな⇒カタカナ
var s = [];
for (var i = 0; i < args.length; i++) {
c = args[i].charCodeAt();
s[i] = (0x3041 <= c && c <= 0x3096) ? c + 0x0060 : c;
}
var katakana = String.fromCharCode.apply(null, s);
// 全角英数⇒半角英数
return katakana.replace(/[A-Za-z0-9]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
} else {
var s = "";
for (var i = 0; i < args.length; i++) {
s += args[i];
}
return s;
}
}
■ 今回わかったこと、というか気づいたこと
typeof の使いかた。
=PHONETIC(A1:A3) みたいに、範囲指定された場合は"Object"になりますね。
(今回は使わなそうなのでelseで適当に処理しました。必要に応じて実装w)
本編とは関係ないですが、勉強になりますねー。
さて、コード自体はたいしたことないですね。
GASは元々JavaScript なので、やりたいことがわかれば先生で一発ですね。
・ひらがな⇒カタカナ は、文字コードで差分取ってあげてます。
・全角英数⇒半角英数 は、正規表現に置換用のfunctionを指定してあげてます。
…なんで、1回目のループで全部やらないのかって?
検証済のソースはいじるなって言うでしょ。いや、
インスパイアしたコードが別々の所だからですm(_ _)m
原理がわかってて動けば、OK!