[C#] Was ist der Algorithmus, um einen Excel-Spaltenbuchstaben in seine Nummer zu konvertieren?



Answers

int result = colName.Select((c, i) =>
    ((c - 'A' + 1) * ((int)Math.Pow(26, colName.Length - i - 1)))).Sum();
Question

Ich brauche einen Algorithmus, um einen Excel-Spaltenbuchstaben in die richtige Zahl zu konvertieren.

Die Sprache, in der dies geschrieben wird, ist C #, aber jede würde tun oder sogar Pseudocode.

Bitte beachten Sie, dass ich dies in C # setze und die Office-DLL nicht verwenden möchte.

Für 'A' wird das erwartete Ergebnis 1 sein

Für 'AH' = 34

Für 'XFD' = 16384




Durchlaufen Sie die Zeichen vom letzten zum ersten. Multiplizieren Sie den Wert jedes Buchstabens (A = 1, Z = 26) mal 26 ** N, addieren Sie zu einer laufenden Summe. Meine Stringmanipulationsfertigkeit in C # existiert nicht, daher hier ein sehr gemischter Pseudocode:

sum=0;
len=length(letters);
for(i=0;i<len;i++)
  sum += ((letters[len-i-1])-'A'+1) * pow(26,i);



Hier ist eine Lösung, die ich in JavaScript geschrieben habe, wenn jemand interessiert ist.

var letters = "abc".toUpperCase();
var sum = 0;
for(var i = 0; i < letters.length;i++)
{
    sum *= 26;
    sum += (letters.charCodeAt(i) - ("A".charCodeAt(0)-1));
}
alert(sum);



in Excel VBA könnten Sie die .Range Methode verwenden, um die Zahl zu erhalten, etwa so:

Dim rng as Range
Dim vSearchCol as variant 'your input column
Set rng.Thisworkbook.worksheets("mySheet").Range(vSearchCol & "1:" & vSearchCol & "1")

Verwenden .column dann die .column :

 debug.print rng.column

Wenn Sie vollständigen Code benötigen, siehe unten:

Function ColumnbyName(vInput As Variant, Optional bByName As Boolean = True) As Variant
    Dim Rng As Range
    If bByName Then
       If Not VBA.IsNumeric(vInput) Then
            Set Rng = ThisWorkbook.Worksheets("mytab").Range(vInput & "1:" & vInput & "1")
            ColumnbyName = Rng.Column
       Else
            MsgBox "Please enter valid non Numeric column or change paramter bByName to False!"
       End If

    Else
        If VBA.IsNumeric(vInput) Then
            ColumnbyName = VBA.Chr(64 + CInt(vInput))
        Else
            MsgBox "Please enter valid Numeric column or change paramter bByName to True!"
        End If

    End If
End Function



Links