C#:EXCEL列名、列序号之间互相转换
EXCEL的列名与列序号 之前的关系如下
A | 1 |
B | 2 |
C | 3 |
D | 4 |
E | 5 |
F | 6 |
G | 7 |
H | 8 |
I | 9 |
J | 10 |
K | 11 |
L | 12 |
M | 13 |
N | 14 |
O | 15 |
P | 16 |
Q | 17 |
R | 18 |
S | 19 |
T | 20 |
U | 21 |
V | 22 |
W | 23 |
X | 24 |
Y | 25 |
Z | 26 |
AA | 27 |
AB | 28 |
/// <summary>
/// 根据给的EXCEL列序号,得出列名字母
/// </summary>
/// <param name="iColNum">序号</param>
/// <returns>列名</returns>
public string ColNum2Name(int iColNum)
{
string result = "";
if (iColNum < 1 || iColNum > 16384)
{
throw new Exception("列号超出范围");
}
while (iColNum > 0)
{
iColNum--; //列号是从1开始的,字母从0开始的
result = (char)('A' + iColNum % 26) + result;
iColNum /= 26;
}
return result;
}
/// <summary>
/// 根据给出的EXCEL列名,转换成列序号
/// </summary>
/// <param name="sColName">列名</param>
/// <returns>序号</returns>
public int ColName2Num(string sColName)
{
int result = 0;
for (int i = 0; i < sColName.Length; i++)
{
result *= 26;
result += sColName[i] - 'A' + 1;
}
return result;
}