使用 Power Query M语言,如何将Excel样式列字母转换为其相应的列号?
Examples:
A=1
Z=26
AA=27
AZ=52
SZ=520
XFD=16384
我有一个Power Query脚本,正在读取Excel .xlsx文件中的.xml。它正在返回包含颜色的单元格,但返回的值为AZ123
格式。我可以将列与行分开,但是现在我想将列转换为数字。
我已经知道如何使用ColumnNumber = Range(ColumnLetters & "1").Column
使用VBA函数将列字母转换为数字,但是我想在Power Query中完成处理。
Here (VBA)和here (C#, JS)是其他语言中的一些算法示例,但我不知道如何用M编写。
奖金请求:您可以将其编写为M函数,以便轻松重用吗?
答案 0 :(得分:3)
您应该能够通过计算列中的一些列表功能来做到这一点:
List.Accumulate(
List.Transform(
Text.ToList([ColumnLetters]),
each Character.ToNumber(_) - 64
), 0,
(state, current) => state*26 + current
)
让我们看一个例子:
Text.ToList("XFD") = {"X", "F", "D"}
List.Transform({"X", "F", "D"}, each Character.ToNumber(_) - 64)
= {88-64, 70-64, 68-64}
= {24, 6, 4}
注意:对于偏移Character.ToNumber
为64的情况,您需要确保字母为大写。
List.Accumulate({24, 6, 4}, 0, (state, current) => state*26 + current)
= ((0*26 + 24)*26 + 6)*26 + 4
= 4 + 6*26 + 24*26^2
= 16348
注意:List.Accumulate
会按照您在每个元素处指定的规则递归地遍历列表。