Ваше предположение верно, за исключением того, что необходимо учитывать некоторые дополнительные сложности.
Если какая-либо из ячеек слева от позиции вставки имеет RowSpan
или ColumnSpan
больше 1, вам нужно будет внести соответствующие корректировки в индексы ячеек, в которые вы вставляете новые ячейки. Например, чтобы вставить новый столбец в позицию третьего визуального столбца, теоретически вы должны вставить новые ячейки перед существующими ячейками с индексом 2. Однако если любая из строк имеет ячейку с индексом 0 с RowSpan=2
, эта ячейка будет охватывают два столбца, поэтому новая ячейка в этой строке должна быть вставлена перед ячейкой с индексом 1.
Если охватывающая столбец ячейка пересекает позицию столбца, в которую вы вставляете, вам не нужно вставлять новую ячейку - просто увеличьте ColumnSpan
существующей ячейки. Точно так же, если в предыдущей строке есть ячейка, охватывающая строки, которая находится в одном из столбцов слева от позиции вставки, вам нужно будет внести соответствующие коррективы.
Фактически, если вы хотите поддерживать полный диапазон сценариев вставки столбцов, код станет довольно сложным. Возможно, вы захотите смоделировать свое решение по методу приватной структуры TextRangeEditTables.InsertColumn()
.