2012-04-29 20 views
5

Powiel możliwe:
How to convert a column number (eg. 127) into an excel column (eg. AA)Konwersja liczby na litery w C# do użytku w programie Microsoft Excel

Ok więc Piszę metodę, która akceptuje tablicy 2D jako parametr. Chcę umieścić tę tablicę 2d na arkuszu programu Excel, ale muszę ustalić końcową lokalizację komórki. Mogę uzyskać wysokość dość łatwo tak:

var height = data.GetLength(1); //`data` is the name of my 2d array 

Daje mi oś Y ale to nie jest tak łatwo dostać mój oś X. Oczywiście mogę uzyskać numer tak:

var width = data.GetLength(0); 

Daje mi to numer, który chcę przekonwertować na list. Na przykład 0 oznacza A, 1 oznacza B i tak dalej, aż dojdziemy do 26, które ponownie powróci do A. Jestem pewien, że istnieje prosty sposób, aby to zrobić, ale mam całkowitą mentalną blokadę.

Co byś zrobił?

Dzięki

+0

nie pełny rozumiem pytanie. Jeśli chcesz osi X, możesz zrobić "data [0] .GetLength (1)". Lub jeśli twoja tablica 2D ma różne rozmiary, możesz zrobić 'dane [i] .GetLength (1)' – noMAD

+0

Próbuję uzyskać nazwę komórki, więc na przykład, gdybym miał tablicę 4x4 i zaczynałem od A1 końcowa nazwa komórki to "D4". Mogę dostać 4 wystarczająco łatwe za pomocą 'data.GetLength (1)', ale 'data.GetLength (0)' daje mi liczbę, z której chcę opracować odpowiednią literę ("D"). – JMK

+3

użyj stylu odniesienia R1C1, aby nie trzeba było obliczyć litery lub uzyskać komórkę z topLeftCell.Offset (arrayHeight, arrayWidth) – phoog

Odpowiedz

23

Oto wersja, która również obsługuje kolumny dwóch liter (po kolumnie z):

static string GetColumnName(int index) 
{ 
    const string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    var value = ""; 

    if (index >= letters.Length) 
     value += letters[index/letters.Length - 1]; 

    value += letters[index % letters.Length]; 

    return value; 
} 
+0

To działa idealnie, dziękuję! – JMK

+0

Proszę wyjaśnić rozumowanie stojące za tym słowami. – stackptr

+1

@EdwardKarak Jeśli spojrzysz na zakres AZ jako zestaw cyfr, liczbę całkowitą w bazie 10 * n * można przekonwertować na liczbę zapisaną w notacji AZ (maksymalnie dwie cyfry), gdzie: pierwsza cyfra jest wynikiem podziału * n * na liczbę cyfr (26), a druga cyfra będzie pozostałą częścią tego podziału. – GolfWolf

1

Wystarczy rzucić go do char i zrobić "toString()".

using System; 
using System.Collections.Generic; 

public class MyClass 
{ 
    public static void RunSnippet() 
    { 
     int myNumber = 65; 
     string myLetter = ((char) myNumber).ToString(); 
     WL(myLetter); 
    } 

    #region Helper methods 

    public static void Main() 
    { 
     try 
     { 
      RunSnippet(); 
     } 
     catch (Exception e) 
     { 
      string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString()); 
      Console.WriteLine(error); 
     } 
     finally 
     { 
      Console.Write("Press any key to continue..."); 
      Console.ReadKey(); 
     } 
    } 

    private static void WL(object text, params object[] args) 
    { 
     Console.WriteLine(text.ToString(), args); 
    } 

    private static void RL() 
    { 
     Console.ReadLine(); 
    } 

    private static void Break() 
    { 
     System.Diagnostics.Debugger.Break(); 
    } 

    #endregion 
} 
+0

To nawet nie skompiluje, nie mówiąc już o poprawnej zmianie numeru kolumny. –

+0

GC Sid, tutaj jest wersja kompilowalna. – bnieland

+0

Ale wciąż nie w pełni odpowiada na pytanie OP, w jaki sposób konwertować numery kolumn na nazwy. Gdy dojdzie do 27, twój kod zwróci '[". Pierwsza odpowiedź [tutaj] (http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into-an-excel-column-eg-aa) zrobi to dobrze. –

Powiązane problemy