Я хотел бы иметь возможность создания экземпляра моего класса Cell
, называя экземпляр ячейки такими именами, как "A", "B", "C" и т. Д., Как в электронной таблице Excel.
У меня есть Cell
класс, например:
public class Cell {
public Cell(Range nativeCell) {
NativeCell = nativeCell;
}
public Range NativeCell { get; private set; }
}
И мой Sheet
класс:
public class Sheet {
private IDictionary<string, Cell> _cells;
public Sheet(Worksheet nativeSheet) {
NativeSheet = nativeSheet;
_cells = new Dictionary<string, Cell>();
for (int rowIndex = 1; rowIndex <= NativeSheet.Rows.Count; ++rowIndex)
for (int colIndex = 1; colIndex <= NativeSheet.Columns.Count; ++colIndex) {
ICell newCell = new Cell(NativeSheet.Cells(rowIndex, colIndex));
newCell.Name = ?? // This name should look like "A1", "B1", "AA3", "CB20", etc.
Cells.Add(newCell.Name, newCell);
}
}
public IDictionary<string, Cell> Cells {
get {
return _cells;
}
}
public Worksheet NativeSheet { get; private set; }
}
Мне нужно было бы сгенерировать имя на основе букв алфавита, удвоить и утроить их, как только я столкнусь с последней буквой алфавита 'Z'. Алгоритм должен был бы генерировать буквы, которые я бы конкатенировал со значением rowIndex
, что привело бы к такой стратегии именования, как Excel.
Буквы будут:
A, B, C, D...Z, AA, AB, AC...AZ, BA, BB, BC...BZ, CA...XAA, XAB, XAC...
Хотя мы четко знаем, что colIndex
значение 1 определенно будет обозначать столбец «A», значение 2 = «B», значение 3 = «C» и т. Д.
Моя проблема, особенно когда мы удваиваем буквы.
Есть ли у вас какие-либо идеи о том, как мне этого добиться в простейшей форме?
Спасибо! =) * * Тысяча двадцать пять