2009-03-27 6 views
1

内部の列は、単純な進数(0は、インデックス化)によって参照されるが、出力のために、私はそれが標準の人間が読める形式にする必要がありますされている、いくつかのスプレッドシートのものを使用した作業:10進数をアルファベット列IDに変換しますか?

A, B, C, .. Z, AA, AB, AC, .. AZ, BA .. 

私が最初にこのテクニックを使用するとA => 0となる点を除いて、[0-9A-P]の代わりに[26]に切り替えて[AZ]を使用します。したがって、シーケンスは実際には次のようになりますこれは:

A, B, .. Y, Z, BA, BB 

どのように小数点をExcel形式の列名に変換しますか?

答えて

0

これはおそらく最も効率的な方法ではありませんが、かなり簡潔で動作します。おそらく、悪いことが起こると思われるので、生産コードの中でZZより上にならないという点で範囲チェックを行う価値があります。もちろん、好きでない場合は、条件演算子をif/elseに展開することもできます。

static string ColumnPrefix(int column) 
{ 
    Debug.Assert(column >= 0, "Column would be below 'A'."); 
    Debug.Assert(column <= 26 * 27, "Column would be above 'ZZ'."); 

    Func<int, string> itoa = i => new string((char)('A' + i), 1); 
    return column < 26 ? 
       itoa(column) : 
       itoa((column - 26)/26) + itoa(column % 26); 
} 
+0

"(column-26)/ 26"は "column/26-1"という方がよく表現されますか? – TechTravelThink

-1

は、VBの関数です。モジュロと対数を利用することにより、それが自明と必要ない再帰ある:VB .NETコードで

Function ColumnLetter(ByVal colNum As Long) As String 
    Dim i As Long, x As Long 
    For i = Int(Log(CDbl(25 * (CDbl(colNum) + 1)))/Log(26)) - 1 To 0 Step -1 
     x = (26^(i + 1) - 1)/25 - 1 
     If colNum > x Then 
      ColumnLetter = ColumnLetter & Chr(((colNum - x - 1) \ 26^i) Mod 26 + 65) 
     End If 
    Next i 
End Function 

Soure

0

と再帰を使用して表現

ため
Function Decimal2ExcelAZ(ByVal number As Integer) As String 
    If number < 0 Then 
     Throw New Exception("Number cannot be negative") 
    ElseIf number < 26 Then 
     Rem 65 is the ASCII of "A" 
     Return New String(Chr(65 + number) + "")   
    Else 
     Return Decimal2ExcelAZ(number \ 26 - 1) + Decimal2ExcelAZ(number Mod 26) 
    End If 
    End Function 
0

ここで、PHP溶液ですthis answerからGraham

function rowCol2Cell($row, $col) { 
    $dividend = $col + 1; 
    $columnName = ''; 

    while ($dividend > 0) { 
     $modulo = ($dividend - 1) % 26; 
     $columnName = chr(65 + $modulo) . $columnName; 
     $dividend = (int)(($dividend - $modulo)/26); 
    } 

    return $columnName . ($row + 1); 
} 

// rowCol2Cell(0, 0) = "A1" 
// rowCol2Cell(0, 1) = "B1" 
// rowCol2Cell(0,26) = "AA1" 

編集

あなたがPHPのPEARモジュールスプレッドシートExcelのライターを使用している場合、それはビルトインこの機能を持っています

Spreadsheet_Excel_Writer::rowcolToCell 

私はおそらくちょうどRTFMをshoulda、ちょっと...

0

Javaのバージョンなしで完全ではないでしょう...

protected static String columnLetter(int columnNumber) { 
if(columnNumber < 0) return "Err"; 
if(columnNumber < 26) 
    return Character.toString((char) (columnNumber+ 65)); 
return columnLetter((columnNumber/26) - 1) + 
    columnLetter (columnNumber % 26); 
} 
(再帰VB .NETの例に基づいて)

関連する問題