找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14779|回复: 0

[原创教程] Excel 列号和数字互相转换

[复制链接]
发表于 2014-8-11 09:31:55 | 显示全部楼层 |阅读模式
原始链接: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
复制代码
您也可以在这里下载完整的脚本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:07 , Processed in 0.009376 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表