[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




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



Ihr müsst außerhalb des Platzes nachdenken. Sie brauchen keine so komplexe Codierung. Die folgende Formel liefert die gleiche Antwort

= MID (ADRESSE (ZEILE (), SPALTE ()), 2, FINDEN ("$", ADRESSE (ZEILE (), SPALTE ()), 2) -2)

Diese Formel gibt Ihnen die Spaltenbuchstaben für jede Spalte, in der Sie sich befinden. Leicht anpassbar, um den Verweis auf eine andere Spalte zu ändern.




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);



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);