Как преобразовать номер столбца (например, 127) в столбец Excel (например, AA) - PullRequest
429 голосов
/ 08 октября 2008

Как преобразовать числовое число в имя столбца Excel в C # без автоматизации, получая значение непосредственно из Excel.

В Excel 2007 возможный диапазон от 1 до 16384, то есть число поддерживаемых столбцов. Результирующие значения должны быть в форме имен столбцов Excel, например, A, AA, AAA и т. Д.

Ответы [ 48 ]

0 голосов
/ 04 ноября 2008

Я использую этот в VB.NET 2003, и он хорошо работает ...

Private Function GetExcelColumnName(ByVal aiColNumber As Integer) As String
    Dim BaseValue As Integer = Convert.ToInt32(("A").Chars(0)) - 1
    Dim lsReturn As String = String.Empty

    If (aiColNumber > 26) Then
        lsReturn = GetExcelColumnName(Convert.ToInt32((Format(aiColNumber / 26, "0.0").Split("."))(0)))
    End If

    GetExcelColumnName = lsReturn + Convert.ToChar(BaseValue + (aiColNumber Mod 26))
End Function
0 голосов
/ 14 декабря 2016

F # версия каждого способа

let rec getExcelColumnName x  = if x<26 then int 'A'+x|>char|>string else (x/26-1|>c)+ c(x%26)

простите за свертывание, работала над лучшей версией https://stackoverflow.com/a/4500043/57883

<ч /> и обратное направление:

// return values start at 0
let getIndexFromExcelColumnName (x:string) =
    let a = int 'A'
    let fPow len i =
        Math.Pow(26., len - 1 - i |> float)
        |> int

    let getValue len i c = 
        int c - a + 1 * fPow len i
    let f i = getValue x.Length i x.[i]
    [0 .. x.Length - 1]
    |> Seq.map f
    |> Seq.sum
    |> fun x -> x - 1
0 голосов
/ 26 августа 2016

Миниатюра Microsoft Excel, формула Quick-and-Dirty.

Привет

Вот один из способов получить заголовок символьного столбца Excel из числа ....

Я создал формулу для ячейки Excel.

(т. Е. Я придерживался подхода не использовать программирование VBA.)

Формула смотрит на ячейку, в которой есть число, и сообщает, что это за столбец - буквами.

На прикрепленном изображении:

  • Я поместил 1,2,3 и т. Д. В верхний ряд до колонки ABS.
  • Я вставил свою формулу во второй ряд полностью в ABS.
  • Моя формула просматривает строку 1 и преобразует число в идентификатор заголовка столбца Excel.
  • Моя формула работает для всех чисел до 702 (zz).
  • Я сделал это таким образом, чтобы доказать, что формула работает, чтобы вы могли посмотреть на вывод из формулы, посмотреть на заголовок столбца выше и легко визуально проверить, работает ли формула. : -)

    = СЦЕПИТЬ (MID ( "_ АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ", (ЕСЛИ (MOD (K1,26)> 0, INT (К1 / 26) + 1, (INT (К1 / 26)))), 1), MID (» АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ», IF (MOD (K1,26) = 0,26, MOD (K1,26)), 1))

Подчеркивание было там для целей отладки - чтобы вы знали, что было реальное пространство и что оно работало правильно.

С помощью приведенной выше формулы - что бы вы ни указали в K1 - формула скажет вам, каким будет заголовок столбца.

Формула в ее текущей форме состоит из двух цифр (ZZ), но может быть изменена для добавления третьей буквы (ZZZ).

enter image description here

0 голосов
/ 14 ноября 2015

Увидел еще один ответ VBA - это можно сделать в с UDF из 1 строки:

Function GetColLetter(ByVal colID As Integer) As String
    GetColLetter = Split(Cells(1, colID).Address, "$")(1)
End Function
0 голосов
/ 09 августа 2015

NodeJS реализация:

/**
* getColumnFromIndex
* Helper that returns a column value (A-XFD) for an index value (integer).
* The column follows the Common Spreadsheet Format e.g., A, AA, AAA.
* See /81658/kak-preobrazovat-nomer-stolbtsa-naprimer-127-v-stolbets-excel-naprimer-aa#81810
* @param numVal: Integer
* @return String
*/
getColumnFromIndex: function(numVal){
   var dividend = parseInt(numVal);
   var columnName = '';
   var modulo;
   while (dividend > 0) {
      modulo = (dividend - 1) % 26;
      columnName = String.fromCharCode(65 + modulo) + columnName;
      dividend = parseInt((dividend - modulo) / 26);
   }
   return columnName;
},

Благодаря Преобразовать алфавит столбца Excel (например, AA) в число (например, 25) . И наоборот:

/**
* getIndexFromColumn
* Helper that returns an index value (integer) for a column value (A-XFD).
* The column follows the Common Spreadsheet Format e.g., A, AA, AAA.
* See https://stackoverflow.com/questions/9905533/convert-excel-column-alphabet-e-g-aa-to-number-e-g-25
* @param strVal: String
* @return Integer
*/
getIndexFromColumn: function(val){
   var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;
   for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) {
      result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1);
   }
   return result;
}
0 голосов
/ 12 ноября 2010
    public string ToBase26(int number)
    {
        if (number < 0) return String.Empty;

        int remainder = number % 26;
        int value = number / 26;

        return value == 0 ?
            String.Format("{0}", Convert.ToChar(65 + remainder)) :
            String.Format("{0}{1}", ToBase26(value - 1), Convert.ToChar(65 + remainder));
    }
0 голосов
/ 13 октября 2018

Для чего это стоит, вот код Грэма в Powershell:

function ConvertTo-ExcelColumnID {
param (
    [parameter(Position = 0,
        HelpMessage = "A 1-based index to convert to an excel column ID. e.g. 2 => 'B', 29 => 'AC'",
        Mandatory = $true)]
    [int]$index
);

[string]$result = '';
if ($index -le 0 ) {
    return $result;
}

while ($index -gt 0) {
    [int]$modulo = ($index - 1) % 26;
    $character = [char]($modulo + [int][char]'A');
    $result = $character + $result;
    [int]$index = ($index - $modulo) / 26;
}

return $result;

}

0 голосов
/ 22 ноября 2008

Если вы хотите ссылаться на ячейку программно, вы получите намного более читаемый код, если будете использовать метод Cells листа. Он принимает индекс строки и столбца вместо ссылки на традиционную ячейку. Это очень похоже на метод смещения.

0 голосов
/ 18 марта 2010
public static string ConvertToAlphaColumnReferenceFromInteger(int columnReference)
    {
        int baseValue = ((int)('A')) - 1 ;
        string lsReturn = String.Empty; 

        if (columnReference > 26) 
        {
            lsReturn = ConvertToAlphaColumnReferenceFromInteger(Convert.ToInt32(Convert.ToDouble(columnReference / 26).ToString().Split('.')[0]));
        } 

        return lsReturn + Convert.ToChar(baseValue + (columnReference % 26));            
    }
0 голосов
/ 24 января 2014

(я понимаю, что вопрос относится к C #, однако, если кому-то, читающему, нужно сделать то же самое с Java , тогда может пригодиться следующее)

Оказывается, что это легко сделать с помощью класса "CellReference" в Джакарта POI . Кроме того, преобразование может быть сделано в обоих направлениях.

// Convert row and column numbers (0-based) to an Excel cell reference
CellReference numbers = new CellReference(3, 28);
System.out.println(numbers.formatAsString());

// Convert an Excel cell reference back into digits
CellReference reference = new CellReference("AC4");
System.out.println(reference.getRow() + ", " + reference.getCol());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...