Board logo

标题: [原创教程] Excel 列号和数字互相转换 [打印本页]

作者: victorwoo    时间: 2014-8-11 09:31     标题: Excel 列号和数字互相转换

原始链接:Excel 列号和数字互相转换
发表日期:2014-08-05


Excel 的列号是采用“A”、“B”……“Z”、“AA”、“AB”……的方式编号。但是我们在自动化操作中,往往希望用数字作为列号。我们可以用 PowerShell 来实现 Excel 的列号和数字之间的互相转换。

## 需求归纳

Excel 列号 -> 数字
  1. A   1
  2. AB  28
  3. AC  29
复制代码
数字 -> Excel 列号
  1. 1   A
  2. 2   B
  3. 24  Y
  4. 26  Z
  5. 27  AA
  6. 28  AB
复制代码
# 算法分析

* Excel 列号 -> 数字
    - 用 ASCII 编码对输入的字符串解码,得到一个数字型数组。
    - 用 26 进制对数组进行处理(逐位 *= 26,然后累加)。
* 数字 -> Excel 列号
    - 用 26 进制对数字进行处理(不断地 /= 26,取余数),得到数字型数组。
    - 将数字型数组顺序颠倒。
    - 用 ASCII 编码对数字型数组编码,得到 Excel 风格的列号。

# 源代码

转换函数:
  1. function ConvertFrom-ExcelColumn ($column) {
  2.     $result = 0
  3.     $ids = [System.Text.Encoding]::ASCII.GetBytes($column) | foreach {
  4.         $result = $result * 26 + $_ - 64
  5.     }
  6.     return $result
  7. }
  8. function ConvertTo-ExcelColumn ($number) {
  9.     $ids = while ($number -gt 0) {
  10.         ($number - 1) % 26 + 1 + 64
  11.         $number = [math]::Truncate(($number - 1) / 26)
  12.     }
  13.     [array]::Reverse($ids)
  14.     return [System.Text.Encoding]::ASCII.GetString([array]$ids)
  15. }
复制代码
测试代码:
   
    echo "A`t$(ConvertFrom-ExcelColumn A)"
    echo "AB`t$(ConvertFrom-ExcelColumn AB)"
    echo "AC`t$(ConvertFrom-ExcelColumn AC)"
   
    echo ''
   
    @(1..2) + @(25..28) | foreach {
        echo "$_`t$(ConvertTo-ExcelColumn $_)"
    }

执行结果:
  1. A   1
  2. AB  28
  3. AC  29
  4. 1   A
  5. 2   B
  6. 25  Y
  7. 26  Z
  8. 27  AA
  9. 28  AB
复制代码
您也可以在这里下载完整的脚本。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2