Вот некоторый код C #, который демонстрирует, как использовать объектную модель для передачи отформатированного содержимого между ячейками таблицы в экземпляре приложения Word (один и тот же документ или другие документы), не с использованием буфера обмена.
При этом используются Range
объекты как для исходной, так и для целевой ячейки. Когда Cell.Range
назначается переменной объекта, она будет содержать всей ячейки - это включает в себя символы конца ячейки ANSI 13 + ANSI 7, которые хранят структуры ячеек. Чтобы скопировать только содержимого без структур ячеек, эти символы должны быть обрезаны с Range
. В зависимости от того, как используется объектная модель, необходимо обрезать один или два символа.
Обрезка выполняется для Range
путем уменьшения области действия Range
(воспринимайте это как удерживание клавиши Shift при нажатии стрелки вправо для выбора) - здесь для источника Range
с использованием метода MoveEnd
. В моих тестах для обрезки этого примера кода работал один символ, но вы захотите проверить его.
Для цели Range
В примере кода используется метод Collapse
, чтобы поместить фокус в начало целевой ячейки (например, нажмите клавишу со стрелкой влево, чтобы свернуть выделение до мигающей точки вставки в начало выбора).
Тогда нужно просто установить свойство FormattedText
цели Range
на свойство FormattedText
источника Range
.
Word.Table tbl = doc.Tables[1];
Word.Range rngCellSource = tbl.Cell(1, 1).Range;
Word.Range rngCellTarget = tbl.Cell(2, 1).Range;
rngCellSource.MoveEnd(Word.WdUnits.wdCharacter, -1);
//System.Diagnostics.Debug.Print(rngCellSource.Text);
rngCellTarget.Collapse(Word.WdCollapseDirection.wdCollapseStart);
rngCellTarget.FormattedText = rngCellSource.FormattedText;