转换A到1 B到2 … Z到26然后AA到27 AB到28(列索引到Excel中的列引用)
是否有人将算法或逻辑转换为1,B转换为2,…,Z转换为26,然后AA转换为27,AB转换为28等。
换句话说,将列索引转换为Excel中的列引用。
看看这些
/// /// 1 -> A
/// 2 -> B
/// 3 -> C
/// ... /// /// /// public static string ExcelColumnFromNumber(int column) { string columnString = ""; decimal columnNumber = column; while (columnNumber > 0) { decimal currentLetterNumber = (columnNumber - 1) % 26; char currentLetter = (char)(currentLetterNumber + 65); columnString = currentLetter + columnString; columnNumber = (columnNumber - (currentLetterNumber + 1)) / 26; } return columnString; } /// /// A -> 1
/// B -> 2
/// C -> 3
/// ... /// /// /// public static int NumberFromExcelColumn(string column) { int retVal = 0; string col = column.ToUpper(); for (int iChar = col.Length - 1; iChar >= 0; iChar--) { char colPiece = col[iChar]; int colNum = colPiece - 64; retVal = retVal + colNum * (int)Math.Pow(26, col.Length - (iChar + 1)); } return retVal; }
这是一个简单的LINQ表达式:
static int TextToNumber(this string text) { return text .Select(c => c - 'A' + 1) .Aggregate((sum, next) => sum*26 + next); }
这个测试
Console.WriteLine(" A -> " + "A".TextToNumber()); Console.WriteLine(" B -> " + "B".TextToNumber()); Console.WriteLine(" Z -> " + "Z".TextToNumber()); Console.WriteLine("AA -> " + "AA".TextToNumber()); Console.WriteLine("AB -> " + "AB".TextToNumber());
将产生此输出:
A -> 1 B -> 2 Z -> 26 AA -> 27 AB -> 28
更新:这是相同的代码,但针对.NET 2.0:
static int TextToNumber(string text) { int sum = 0; foreach (char c in text) { sum = sum*26 + c - 'A' + 1; } return sum; }
如果您喜欢在客户端完成,这是JavaScript的代码
同样的问题,不同的语言:PHP。
上述就是C#学习教程:转换A到1 B到2 … Z到26然后AA到27 AB到28(列索引到Excel中的列引用)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
function charToInt($char) { $array = array_flip(range(a, z)); return $array[$char] + 1; } echo charToInt('c'); outputs: 3
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010947.html