Как выбрать прямоугольную область ячеек в таблице Word - PullRequest
2 голосов
/ 27 января 2012

Учитывая что-то вроде

Table table;
Cell cell_1 = table.Cell(2,2);
Cell cell_2 = table.Cell(4,4);

Я хочу выбрать (или выделить) из ячейки_1 в ячейку_2 (как если бы вы делали это вручную).

Изначально я думал, что сработает следующее:

Selection.MoveRight(wdUnits.wdCell, numCells, WdMovementType.wdExtend)

Но в соответствии с http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.selection.moveright%28v=office.11%29.aspx в примечаниях, использование wdCells в качестве модуля по умолчанию установит для WdMovementType значение wdMove, и я не могу думать об обходном пути.

Ответы [ 2 ]

1 голос
/ 12 июня 2013

Намного проще сделать это, используя метод Document.Range, чтобы создать диапазон между двумя углами прямоугольника. Это работает одинаково хорошо с объединенными ячейками.

word.Document document;    
word.Cell cellTopLeft;
word.Cell cellBottomRight;

document.Range(cellTopLeft.Range.Start, cellBottomRight.Range.End).Select

Примечание. Можно использовать диапазон, возвращаемый этим выражением, чтобы манипулировать содержимым таблицы, не выбирая его, но он не работает для объединения ячеек (в последнем случае используйте cell.Merge(MergeTo)).

1 голос
/ 27 января 2012

Вот обходной путь, который я нашел к проблеме. Это не самый эффективный способ, и это doesn't work if the table has merged cells in it. Я обнаружил, что вы можете выбрать диапазон вашей начальной ячейки, а затем расширить конечную точку диапазона, перемещаясь в единицах ячеек. Определив количество ячеек между начальной и конечной точками региона, который вы хотите выбрать, вы можете выполнить итерацию этого количества ячеек. Вот общий код для этого ниже:

word.Table table;
word.Cell cellTopLeft; //some cell on table.
word.Cell cellBottomRight; //another cell on table. MUST BE BELOW AND/OR TO THE RIGHT OF cellTopLeft

int cellTopLeftPosition = (cellTopLeft.RowIndex - 1) * table.Columns.Count + cellTopLeft.ColumnIndex;
int cellBottomRightPosition = (cellBottomRight.RowIndex - 1) * table.Columns.Count + cellBottomRight.ColumnIndex;
int stepsToTake = cellBottomRightPosition - cellTopLeftPosition;

if (stepsToTake > 0 && 
    cellTopLeft.RowIndex <= cellBottomRight.RowIndex && //enforces bottom right cell is actually below of top left cell
    cellTopLeft.ColumnIndex <= cellBottomRight.ColumnIndex) //enforces bottom right cell is actually to the right of top left cell
{
   word.Range range = cellTopLeft.Range;
   range.MoveEnd(word.WdUnits.wdCell, stepsToTake);
   range.Select();      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...