Excel 列名への変換
ググると割と巷にコードサンプルが見つかるものの Clojure は見つからなかったので作ってみた。
(defn num->col-name [n] "1以上の数値からExcelの列名表記に変換する" (letfn [(charseq [x] (when (pos? x) (cons (mod (dec x) 26) (charseq (quot (dec x) 26)))))] (->> (charseq n) (map (comp char (partial + 65))) reverse (apply str))))
こんな感じ。
user> (num->col-name 0) "" user> (num->col-name 1) "A" user> (num->col-name 26) "Z" user> (num->col-name 27) "AA" user> (num->col-name 256) "IV" user> (num->col-name 16384) "XFD"
うん、Excel2007 までは対応できそう。
0以下が空文字になるのはご愛嬌。
Clojureの無限シーケンスでいくらでも作れちゃう。
user> (take 100000 (map num->col-name (iterate inc 1))) ("A" "B" "C" "D" ...(中略)..."EQWZ" "EQXA" "EQXB" "EQXC" "EQXD")
まだ Excel2010 でもここまで表示しないがw
Excel2013 はどうなんだろ。