API MsWord - Как переместить содержимое ячейки таблицы из одной в другую - PullRequest
0 голосов
/ 05 ноября 2018

Я пытался использовать методы Cell->Copy() и Cell->Paste(), но это также изменяет буфер обмена. Есть ли другой способ переместить все содержимое одной ячейки в другую?

Я попытался установить Cell->Range->Text, но это исключает другие объекты, такие как изображения.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вот некоторый код 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;
0 голосов
/ 05 ноября 2018

Я не вижу ни одного в документации .

Само понятие "сдвига" данных обязательно обрезает их там, где они есть, и вставляет их в другое место.

Я бы спросил, почему вы боитесь касаться буфера обмена. Это его цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...