A列にこのように文字が入っていて
UTF16に変換してB列に入力して
16進数に変換してC列に入力する
コード.gs
function str_utf16_hexadecimal() { var values = get_values(); var result = []; for(var i = 0; i < values.length; i++){ var str = values[i].toString() var utf16 = get_utf16(str); var hexdecimal = get_hexdecimal(utf16); result.push([utf16, hexdecimal]); } set_values(result); } function get_values(){ var sh = SpreadsheetApp.getActiveSheet(); var last_row = sh.getLastRow(); var range = sh.getRange("A2:A" + last_row); var values = range.getValues(); return values; } function get_utf16(str) { var array = []; var low = ""; if (str.length == 2) { var high = str.charCodeAt(0); var low = str.charCodeAt(1); var utf16 = high + " " + low; } else {//サロゲートペア以外なら var utf16 = str.charCodeAt(0); } array.push(utf16); return array; } function get_hexdecimal(utf16) { var surrogates = false; var hexdecimal = ""; var str_split = utf16.toString().split(" "); if (str_split.length == 2) { surrogates = true; } if (surrogates == true) { var high = "0x" + parseInt(str_split[0]).toString(16); var low = "0x" + parseInt(str_split[1]).toString(16); hexdecimal = high + " " + low; } else { hexdecimal = "0x" + parseInt(utf16).toString(16); } return hexdecimal; } function set_values(array){ var sh = SpreadsheetApp.getActiveSheet(); var start_row = 2; var start_col = 2; var num_rows = array.length; var num_cols = array[0].length; var range = sh.getRange(start_row, start_col, num_rows, num_cols); range.setValues(array); } |
意訳この機能がやること get_values()から値を取得して 結果を入れる配列を用意して 値の数だけ以下を繰り返す 値をひとつずつ文字列にして get_utf16(str)に渡して get_hexdecimal(utf16)に渡して resultに追加する resultをset_values()に渡す この機能がやること アクティブシートを取得して データが入っている最終行を取得して A2から最終行までを範囲指定して 値をすべて取得して 返す この機能がやること 結果を入れる配列を用意して サロゲートペアの後半を入れる入れ物を用意して もし渡された文字がサロゲートペアなら 前半部分をUTF16にして 後半部分をUTF16にして 前後半を半角スペース入れてつなげる サロゲートペア以外なら 渡された文字をUTF16にして UTF16の値をarrayに追加して 返す この機能がやること サロゲートペアのフラグをfalseにしておく 16進数の結果を空にしておく 渡されたutf16を文字列にして半角スペースで区切る もし2つ以上(サロゲートペア)なら surrogatesフラグをtrueにする もしsurrogatesフラグがtrueなら 区切った前半を16進数にして 区切った後半を16進数にして 半角スペースを挟んでつなげる サロゲートペアじゃなければ 渡されたutf16を16進数にして 16進数の値を返す この機能がやること アクティブシートを取得して 入力する先頭の行を指定して 入力する先頭の列を指定して 入力する行数を指定して 入力する列数を指定して 入力する範囲を指定して 入力する |
関連記事
文字列をUTF-16に変換する
文字列⇔UTF16⇔16進数の相互変換をする(サロゲートペア非対応)
文字列⇔UTF16⇔16進数の相互変換をする(サロゲートペア対応)
文字列→UTF16→16進数→文字列に変換する