見出し画像

【GAS】Google Apps Script 活用事例 スプレッドシートにはなぜか存在しないPHONETIC関数を自力で作ってみた。

画像はBING IMAGE CREATORで作成しました。The beauty of Japanese Characters, hiraganaと打ちました。なぜか新しい漢字が生成されとる….。

なんで無いの?マジで痒いところに手が届かない

EXCELにはあるけど、Google Spreadsheetには存在しない関数の一つである、PHONETIC関数を自力で作ってみました。

こういう感じでリストを作成して、照合して変換しています。
ひらがなAPIとかChat GPTを使う方法などいくつかあるものの、どれもテキストを他社サーバーに飛ばして変換結果を得るというフローなので、それが応募者情報や顧客情報だとマズいわけですよ…..。

APIを使用したマクロを書く、悪意は無くとも、いわば故意に情報漏洩したことになるので追及された時は、クビになっても文句は言えますまい。

Google Spreadsheetでデータを管理する以上、Googleのサーバー内に情報が保管されているので、Googleサーバー内で処理を完結させれば、まぁ文句は言われないでしょう。

コード全文

/**
 * 
 * カタカナ -> ひらがな
 * ひらがな -> カタカナ
 * 
 * いずれかに変換する関数、EXCELでいうところのPHONETIC関数と同じような挙動
 * 
 * @param  {string} text - 人の名前など
 * @return {string} 
 * 
 */
function convertKanaCharacters(text) {

  const url         = 'https://docs.google.com/spreadsheets/d/1ng3FcOMax4lbDhqg11UTYHvp6uILLdUFb4_yttI7cy0/edit#gid=1358147510';
  const spreadsheet = SpreadsheetApp.openByUrl(url);
  const sheet       = spreadsheet.getSheetByName('カタカナ変換');
  const values      = sheet.getDataRange().getValues();

  if(text.match(/[ぁ-ん]/) !== null){
    return swapCharacters_(values, text, 1, 0);

  }else if(text.match(/[ァ-ヴー・]/) !== null){
    return swapCharacters_(values, text, 0, 1);
  }
}



/**
 * スプレッドシートの2次元配列内のデータを検索し、一致した行かつ指定した列の情報を返す
 * 
 * @param  {string} values - カタカナ変換表の2次元配列
 * @param  {number} text - 置換対象の文字列
 * @param  {string} queryColumnIndex - 該当データがあるかどうかを検索する列
 * @param  {number} resultColumnIndex - データを取得したい列
 * @return {string} 取得したいデータ 
 * 
 */
function swapCharacters_(values, text, queryColumnIndex, resultColumnIndex){

  const array    = text.split('');
  const newArray = array.map(char => {
    const pairs = values.find(row => row[queryColumnIndex] === char); // ['ア', 'あ']
    return pairs ? pairs[resultColumnIndex] : char;
  });

  const newText = newArray.join('');

  console.log(`変換後の文字列:${newText}`);
  return newText
}

こちらのコードでは、カタカナ変換表の2次元配列だけ使って、
カタカナはひらがなに。ひらがなはカタカナに変換します。

EXCEL本家のPHONETIC関数は、漢字にも読み仮名が振ることが出来るのですが、おそらく、その機能を実装するには、機械学習的なプロセスが必要になるでしょう。今回はGASで無理なく出来る範囲だけで処理しました。

const url         = 'https://docs.google.com/spreadsheets/d/1ng3FcOMax4lbDhqg11UTYHvp6uILLdUFb4_yttI7cy0/edit#gid=1358147510';
const spreadsheet = SpreadsheetApp.openByUrl(url);
const sheet       = spreadsheet.getSheetByName('カタカナ変換');
const values      = sheet.getDataRange().getValues();

この部分で参照しているスプレッドシートは自分が作った対照表です。ご安心を。

ログ出力

上の例でいうと、テキストを配列化して1文字ずつ変換しています。

[ 'カ', 'マ', 'ド', ' ', 'タ', 'ン', 'ジ', 'ロ', 'ウ' ]

上記の関数をライブラリに登録済みです。ぜひ使ってみてください。
ライブラリを使用すると、難しい知識なしに2行で書けます。

function test_convertChar() {
  const sampleText = 'カマド タンジロウ';
  nepia_infinity.convertKanaCharacters(sampleText); 
}

ライブラリの読み込み方・使い方については下記記事をご覧ください。


この記事が気に入ったらサポートをしてみませんか?