C # Excel для быстрого чтения объединенных областей - PullRequest
0 голосов
/ 02 мая 2019

Использование

object[,] values = _worksheet.UsedRange.Value2;

Я могу очень быстро читать содержимое таблицы Excel.К сожалению, информация о слитых ячейках исчезает при таком подходе.

Есть ли способ получить информацию о слитом состоянии ячеек?Как это можно сделать с помощью

_worksheet.UsedRange.Rows.Cells[row, column].MergeCells

Поскольку в настоящее время я выполняю итерацию по количеству строк, объединенных с использованием

_worksheet.UsedRange.Rows.Cells[row, column].MergeArea.Rows.Count()

Я бы хотелиметь что-то похожее с массивом объектов.

Есть ли способ преобразовать "Range" в какой-нибудь массив объектов, чтобы была доступна дополнительная информация?

EDIT:Поскольку я не нашел другого решения, я тем временем кодировал его так:

/// <summary>
/// Check whether a row is part of a merged area
/// </summary>
/// <param name="row">Row of merged area</param>
/// <param name="column">Column of merged area</param>
/// <returns>True if row is part of a merged area</returns>
public bool IsRowMerged(in int row, in int column)
{
    bool result = false;

    if (((row + 1) <= GetRows().Count) && (null == GetValues()[(row + 1), column]))
    {
        result = true;
    }

    return result;
}

/// <summary>
/// Get count of rows of merged area
/// </summary>
/// <param name="row">Row of merged area</param>
/// <param name="column">Column of merged area</param>
/// <returns>Count of rows of merged area</returns>
public int GetMergedRowsCount(in int row, in int column)
{
    int m = 1;
    for (; ( ((row + m) <= GetRows().Count) && (null == (GetValues()[(row + m), column]) )); m++);
    return m;
}

Где GetValues ​​() даст вам массив объектов, а GetRows () даст вам используемые строки.Предполагается, что строка с содержимым «null» является частью «объединенной» ячейки.Мне не нужно проверять объединенные столбцы прямо сейчас.Работает довольно хорошо для меня.

...