2014-11-06 28 views

回答

8
def excel_col_index(str) 
    value = Hash[ ('A'..'Z').map.with_index.to_a ] 
    str.chars.inject(0){ |x,c| x*26 + value[c] + 1 } 
end 

或者

def excel_col_index(str) 
    offset = 'A'.ord - 1 
    str.chars.inject(0){ |x,c| x*26 + c.ord - offset } 
end 
+0

我觉得第二个很漂亮:3 – Kokizzu 2014-11-06 07:40:50

1

啊没关系..

def cell2num col 
    val = 0 
    while col.length > 0 
    val *= 26 
    val += (col[0].ord - 'A'.ord + 1) 
    col = col[1..-1] 
    end 
    return val - 1 
end 
4

我会做这样的事情:

def column_name_to_number(column_name) 
    multipliers = ('A'..'Z').to_a 
    chars = column_name.split('') 

    chars.inject(-1) { |n, c| multipliers.index(c) + (n + 1) * 26 } 
end