Excel 的列与数字转换
Excel 的列与数字转换
1
2
3
4
| 十进制 0 1 ... 9 10 11 ... 100 101
按十进制 A B ... Z BA BB ... BAA BAB // Z=26 ZZ=26*26 ZZZ=26*26*26
实际上 A B ... Z AA AB ... AAA AAB // Z=26 ZZ=26*26 + 26 ZZZ=26*26*26 + 26*26 + 26
// 转成公式 Z=26 ZZ=(Z)*26 + 26 ZZZ=(ZZ)*26 + 26
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| function id_to_xls($id)
{
$k = '';
while (true) {
$k = chr($id % 26 + ord('A')) . $k;
$id -= 26;
if ($id < 0)
break;
$id = (int)($id / 26);
}
return $k;
}
function xls_to_id($xlsCol)
{
$hh = 0;
for ($i = 0; $i < strlen($xlsCol); $i ++) { // ZZ = 26*26 + 26
$hh = $hh * 26; // 26*26
$hh += ord($xlsCol[$i]) - ord('A') + 1; // 26
}
return $hh - 1;
}
for ($i = 0; $i < 26*26*26 + 26*26 + 26 + 10; $i ++) {
$k = id_to_xls($i);
$id = xls_to_id($k);
echo $i, "\t", $k, "\t", $id, "\n";
}
|