Translate a column index into an Excel Column Name

前端 未结 15 2227
花落未央
花落未央 2020-11-27 20:41

Given a columns\' index, how can you get an Excel column name?

The problem is trickier than it sounds because it\'s not just base-26. The columns

相关标签:
15条回答
  • 2020-11-27 20:46

    this is with Swift 4 :

    @IBAction func printlaction(_ sender: Any) {
        let textN : Int = Int (number_textfield.text!)!
        reslut.text = String (printEXCL_Letter(index: textN))
    }
    
    
    func printEXCL_Letter(index : Int) -> String {
    
        let letters = ["a", "b", "c","d", "e", "f","g", "h", "i","j", "k", "l","m", "n", "o","p", "q", "r","s", "t", "u","v","w" ,"x", "y","z"]
    
        var index = index;
        index -= 1
        let index_div = index / 26
    
        if (index_div > 0){
            return printEXCL_Letter(index: index_div) + letters[index % 26];
        }
        else {
            return letters[index % 26]
        }
    }
    
    0 讨论(0)
  • 2020-11-27 20:47

    It's for this very reason that I avoid column names in programmed interface to Excel. Using column numbers works very well in Cell(r,c) references and R1C1 addressing.

    EDIT: The Range function also takes cell references, as in Range(Cell(r1,c1),Cell(r2,c2)). Also, you can use the Address function to get the A1-style address of a cell or range.

    EDIT2: Here's a VBA function that uses the Address() function to retrieve the column name:

    Function colname(colindex)
        x = Cells(1, colindex).Address(False, False) ' get the range name (e.g. AB1)
        colname = Mid(x, 1, Len(x) - 1)              ' return all but last character
    End Function
    
    0 讨论(0)
  • 2020-11-27 20:47

    This is an old post, but after seeing some of the solutions I came up with my own C# variation. 0-Based, without recursion:

    public static String GetExcelColumnName(int columnIndex)
    {
        if (columnIndex < 0)
        {
            throw new ArgumentOutOfRangeException("columnIndex: " + columnIndex);
        }
        Stack<char> stack = new Stack<char>();
        while (columnIndex >= 0)
        {
            stack.Push((char)('A' + (columnIndex % 26)));
            columnIndex = (columnIndex / 26) - 1;
        }
        return new String(stack.ToArray());
    }
    

    Here are some test results at key transition points:

    0: A
    1: B
    2: C
    ...
    24: Y
    25: Z
    26: AA
    27: AB
    ...
    50: AY
    51: AZ
    52: BA
    53: BB
    ...
    700: ZY
    701: ZZ
    702: AAA
    703: AAB
    
    0 讨论(0)
  • 2020-11-27 20:50

    In Ruby:

    class Fixnum
      def col_name
        quot = self/26
        (quot>0 ? (quot-1).col_name : "") + (self%26+65).chr
      end
    end
    
    puts 0.col_name # => "A"
    puts 51.col_name # => "AZ"
    
    0 讨论(0)
  • 2020-11-27 20:53

    Here's Joel's awesome code modified to work with zero-based column indexes and without the char array.

     Public Shared Function GetExcelColumn(ByVal index As Integer) As String
    
            Dim quotient As Integer = index \ 26 ''//Truncate 
            If quotient > 0 Then
                Return GetExcelColumn(quotient - 1) & Chr((index Mod 26) + 64).ToString
    
            Else
                Return Chr(index + 64).ToString
    
            End If
    
        End Function
    
    0 讨论(0)
  • 2020-11-27 20:53

    JavaScript Solution

    /**
     * Calculate the column letter abbreviation from a 0 based index
     * @param {Number} value
     * @returns {string}
     */
    getColumnFromIndex = function (value) {
        var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
        value++;
        var remainder, result = "";
        do {
            remainder = value % 26;
            result = base[(remainder || 26) - 1] + result;
             value = Math.floor(value / 26);
        } while (value > 0);
        return result;
    };
    
    0 讨论(0)
提交回复
热议问题