Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2010, 14:15   #1
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию RTF содержимое ячейки таблицы MS Word в Буфер обмена или в RichEdit

Здравствуйте.

У меня есть таблица в MS Word в которой в ячейках двух столбцов содержится отформатированный текст (индексы, курсив).

Запустим следующих код:
...
Table.Cell(jGridCols, iGridRows).Range.Copy;
...
RichEdit1.PasteFromClipboard;

Текст вставляется в RichEdit отформатированным, НО!!! вместе с рамкой (сеткой таблицы) ячейки.

Для справки: =================================== ==
MSWord := CreateOleObject('Word.Application') ;
Table := MSWord.ActiveDocument.Tables.Item(i TableChosen);
=================================== =============

Пожалуйста, покажите кусочек кода или подскажите направление в котором искать, чтобы скопировать только отформатированный текст (содержимое) в ячейке таблицы Word.
Возможно есть другой путь, не сразу из Word. Просто надо ввести очень много данных в БД с сохранением форматирования.

Спасибо.

P.S. Я задавал этот вопрос, но видимо не в нужном месте (http://programmersforum.ru/showthrea...65581&posted=1 ).
OlegVE вне форума Ответить с цитированием
Старый 24.11.2010, 15:18   #2
forumWord
Пользователь
 
Регистрация: 23.09.2010
Сообщений: 65
По умолчанию

Код:
Sub Макрос1()
ActiveDocument.Tables(1).Cell(1, 1).Range.Copy
End Sub
Код:
Sub Макрос2()
Selection.PasteAndFormat (wdSingleCellText)
End Sub
forumWord вне форума Ответить с цитированием
Старый 24.11.2010, 15:50   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от forumWord Посмотреть сообщение
Код:
Sub Макрос1()
ActiveDocument.Tables(1).Cell(1, 1).Range.Copy
End Sub
Код:
Sub Макрос2()
Selection.PasteAndFormat (wdSingleCellText)
End Sub
Спасибо за отклик.
Первая строчка записывает в буфер обмена содержимое ячейки + РАМКА.

Со второй строчкой - я не понял.
В Word это работает отлично, вставляется без рамки. Как это получить в Delphi?
Вопрос даже не по Delphi: Как в буфер обмена получить содержимое ячейки без рамки? Неужели единственный путь создать ещё один документ, вставить из буфера содержимое, вырезать его и иметь только содержимое ячейки и делать так в цикле
Может подскажете как выделить в MS Word всё, только что вставленное.

Спасибо.

P.S. Опять не туда попал... Не знаю уж где задать вопрос.

P.P.S. Спасибо forumWord, для VBA ответ на отлично. Спасибо.


P.P.S. !!! Проблема разрешена !!! См. "Из ячейки таблицы Microsoft Word в RichEdit" http://programmersforum.ru/showthrea...65581&posted=1 .
В буфер обмена копируется то, что нужно.

Всем спасибо.

Последний раз редактировалось OlegVE; 24.11.2010 в 19:57. Причина: Добавка
OlegVE вне форума Ответить с цитированием
Старый 24.11.2010, 20:51   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Код:
    With Table.Cell(jGridCols, iGridRows).Range
        .MoveEnd Unit:=wdCharacter, Count:=-1
        .Copy
    End With
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 25.11.2010, 12:54   #5
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Код:
    With Table.Cell(jGridCols, iGridRows).Range
        .MoveEnd Unit:=wdCharacter, Count:=-1
        .Copy
    End With
Это решение для VBA (может и VB, я не знаю), в Delphi примерно так я и решил задачу (см. приведенную мною ссылку выше). НО, для Range необходимо смещаться на 2 символа, т.к. имеется знак абзаца и знак табуляции, т.е. ... Count:=-2 ...
Проблема состояла в том, что при отсутствии содержимого в ячейке выскакивает ошибка (по крайней мере в Delphi).
Надо просто проверить, например так:
if not VarisEmpty(Table.Cell(jGridCols, iGridRows).Range.FormattedText) then
begin
...
прежде чем копировать Selection.

Спасибо всем.
OlegVE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из ячейки таблицы Microsoft Word в RichEdit OlegVE Общие вопросы Delphi 3 24.11.2010 13:54
Буфер обмена dmitriegorovih Общие вопросы Delphi 13 09.09.2010 12:54
Буфер обмена Dem6 Общие вопросы Delphi 0 14.12.2009 19:09
буфер обмена olimpus Microsoft Office Excel 2 19.09.2009 08:52