LoginSignup
2
2

More than 5 years have passed since last update.

jsで26進数を処理する(Excelのカラム表記変換処理)

Last updated at Posted at 2019-01-26

Excelのカラムの表記(26進数)と10進数をjsで相互変換するレアな要求があったのでその対応。

手動実装はしんどいなと思っていたところ、ライブラリがあるみたいなので試す。
とりあえずテストも書かれているbase26というのを触ってみる。他にもあるみたい。

インストール

npm install --save base26

実装

とりあえずindex.jsってファイルを作って記述。

index.js
//10進数を26進数に変換して大文字表示
console.log(base26.to(10));
console.log(base26.to(100));

//26進数を10進数に変換
console.log(base26.from('j'));
console.log(base26.from('cv'));

実行と確認

まあ、動きます。

node index.js

j
cv
10
100

大文字にしたければtoUpperCase()などを使えば良い。

自力でto, fromを行う

いちおう自力で計算する方法も。

ASCIIコードを利用する。

//toBase26
//0とかだとおかしくなる
function to(num) {
    const mod = num % 26;
    let pow = num / 26 | 0;
    const out = mod ? String.fromCharCode(64 + mod) : (--pow, 'Z');

    return pow ? to(pow) + out : out;
}

//toBase1
//手抜きなので大文字じゃないとだめ
function from(str){
    let out = 0;
    const len = str.length;
    let pos = len;
    while(--pos > -1){
        out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos); 
    }

    return out;
}

//利用
console.log(to(1));
console.log(from('A'));
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2