kozmikadam Ответов: 3

C# получить имя столбца из excel с помощью interop


Всем привет,

В эти дни я работаю с файлами Excel.

Мне нужно вставить колонку между некоторыми другими.

Я использую этот код, и он отлично работает.

Excel.Range araAt = raporWrkS.Range["K1"];
                                            araAt.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight,
                    Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);


На этом коде я написал K1 только для примера. И работает в цикле if.
Я начинаю с первой колонки и иду направо с каждой новой информацией. Но иногда мне нужно вставить новый столбец между этими столбцами.И используя этот код, чем.

Но как я могу написать имя столбца автоматически? Например, если новая строка должна быть добавлена на F1, то K1 должен быть F1. Поэтому мне нужно получить имя столбца из этого. Но я не могу получить название столбца. Посмотрел много документов в интернете, но все они имеют числовое название столбца.

Не могли бы вы показать мне способ, как я могу получить имя столбца ?

Спасибо.

Что я уже пробовал:

Поискал в интернете свойство ColumnName или что-то в этом роде.

kozmikadam

Я решил свою проблему. Получить количество столбцов (я получаю с помощью цикла for), а затем преобразовать его в алфавитную версию.

частная строка GetExcelColumnName(int columnNumber)
{
дивиденды инт = номер столбца;
string columnName = строка.Пустой;
инт по модулю;

в то время как (дивиденды > 0)
{
модуль = (дивиденд - 1) % 26;
имя_столбца = конвертировать.Тохар (65 + по модулю).ToString() + columnName;
дивиденд = (int) ((дивиденд-по модулю) / 26);
}

возвращаемое имя столбца;
}

3 Ответов

Рейтинг:
23

kozmikadam

Вот решение.

Прежде всего, я получаю подсчет столбцов с помощью цикла for. Я считаю каждый столбец в этом цикле. Уже есть и эта петля.

А затем преобразуйте количество столбцов в алфавитную версию с помощью этого кода.

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;
}


Рейтинг:
10

Bhola Ram Sahu

Вы можете получить имя столбца из приведенного ниже кода. Затем вы можете поместить новое имя столбца.

Excel.Application xlApp = new Excel.Application();
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("workbookname");
    Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1]; // assume it is the first sheet
    int columnCount = xlWorksheet.UsedRange.Columns.Count;
    List<string> columnNames = new List<string>();
    for (int c = 1; c < columnCount; c++)
    {
        if (xlWorksheet.Cells[1, c].Value2 != null)
        {
            string columnName = xlWorksheet.Columns[c].Address;
            Regex reg = new Regex(@"(\$)(\w*):");
            if (reg.IsMatch(columnName))
            {
                Match match = reg.Match(columnName);
                columnNames.Add(match.Groups[2].Value);
            }
       }
    }


kozmikadam

Спасибо! Это тоже работает. Но почти 1 час назад я решил ее по-другому. В любом случае спасибо за ответ.

Рейтинг:
0

Patrice T

Интересно, почему вы используете эти координаты, которые являются графическим интерфейсом для пользователей ?
Почему бы вам не сказать своей программе, чтобы она использовала непосредственно номер столбца ?

    Excel.Range araAt = raporWrkS.cells(columnNumber,1);
    araAt.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight,
Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);


kozmikadam

Привет, случайно я посмотрел на такой ответ, как этот. И не мог найти. Я попробую сделать это предложение сегодня. Спасибо.