メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

SpreadsheetsでExcelのPHONETIC的なことがしたい!

相変わらず、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!