вземете диапазон в взаимодействието на excel въз основа на аргумент

Имам метод, който приема параметри и въз основа на един параметър трябва да получа различен диапазон в моя 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