получить диапазон в excel interop на основе аргумента

У меня есть метод, который принимает параметры, и на основе одного параметра я должен получить другой диапазон в своем листе Excel, например, если мой параметр равен «2», тогда диапазон будет следующим:

A1 - B1 (2 columns on the top row)

если параметр равен «4», то диапазон:

A1 - D1 (4 columns)

я думал об этом, чтобы сделать массив строк следующим образом:

public void excelExport(int columns) {
 string[] alphabet = { "A", "B", "C", "D" ... "Z"};
 Range range = ws.get_Range("A1", alphabet[columns] + "1");
}

однако excel может входить в столбцы с двойными, тройными и т. д. символами (я сомневаюсь, что мне нужно будет входить в столбцы с тройными символами «AAA, AAB и т. д.»), но, как вы можете видеть, я не могу сделать массив, который имеет около 50 индексов, потому что что, если мне в какой-то момент понадобится 51 или 52 столбца? мой метод массива не будет работать.

есть ли более простой способ динамического получения диапазонов на основе числа в аргументе?


person duxfox--    schedule 12.01.2015    source источник


Ответы (1)


Добавьте этот вспомогательный метод. Предполагается, что если columnNumber установлено в 1, это представляет столбец "A". Значение 2 представляет «B» и т. д.:

private string GetExcelColumnName(int columnNumber)
{
    int dividend = columnNumber;
    string columnName = String.Empty;
    int modulo;
    while (dividend > 0)
    {
        modulo = (dividend - 1) % 26;
        columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
        dividend = (int)((dividend - modulo) / 26);
    } 
    return columnName;
}

Используйте это так:

public void ExcelExport(int columnNumber)
{
    Range range = ws.get_Range("A1", GetExcelColumnName(columnNumber) + "1");
    // do stuff with range
}
person Quality Catalyst    schedule 13.01.2015