首页 > 解决方案 > 如何将列名转换为 Haskell 中的列索引

问题描述

Excel 列名称类似于 A、B、C ... AA、AB、AC 直到无限。如何将列名转换为 Haskell 中的列索引。我可以将索引转换为列,但无法实现反向功能。有人可以解释一下如何编写它的反向函数吗?列索引:

f n = (concatMap sequence $ tail $ iterate (['A'..'Z'] :) []) !! n

标签: haskell

解决方案


Excel 列只是 Base26 中的数字,数字为 AZ。

使用readIntNumeric.

xlColumnToNumberR :: ReadS Int
xlColumnToNumberR = readInt 26 -- There are 26 letters
                            isAlpha -- From 'Data.Char'
                            xlValue
  where xlValue c = ord (toUpper c) - ord 'A' + 1

xlColumnToNumber :: String -> Maybe Int
xlColumnToNumber n = case xlColumnToNumberR n of
                       [(x, "")] -> Just x
                       _ -> Nothing

推荐阅读