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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2010, 19:27   #1
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию Из ячейки таблицы Microsoft Word в RichEdit

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

У меня есть таблица в MS Word в которой в столбцах содержится отформатированный текст (индексы, курсив). Нашел решение по получению из таблицы и вставке в StringGrid текста из ячеек таблицы MS Word (http://disketa.info/page.asp?page=doc&idd=1573&raz=10):

...
CellText := Table.Cell(jGridCols, iGridRows).Range.FormattedText;
...
Stringgrid1.Cells[iGridRows, jGridCols] := CellText;


После небольшой переделки для RichEdit получил:
...
Table.Cell(jGridCols, iGridRows).Range.Copy;
...
RichEdit1.PasteFromClipboard;


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

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

Спасибо.

Последний раз редактировалось OlegVE; 22.11.2010 в 20:43.
OlegVE вне форума Ответить с цитированием
Старый 23.11.2010, 07:19   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Может что-то типа того
Код:
Table.Cell(jGridCols, iGridRows).Range.Select;
Selection.End = Selection.End - 1;
Selection.Copy;
Sibedir вне форума Ответить с цитированием
Старый 23.11.2010, 13:04   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Может что-то типа того
Код:
Table.Cell(jGridCols, iGridRows).Range.Select;
Selection.End = Selection.End - 1;
Selection.Copy;
Спасибо за ответ.
Я также пробовал варианты:
1) MSWord.Selection.MoveLeft(1, 1);
и
2) MSWord.Selection.MoveLeft(1, 2);

но и в том и другом и в третьем случае "выскакивает" ошибка

"Метод или свойство недоступны, поскольку выделенный текст отсутствует"

В принципе из-за этого у меня и возникла сложность, я не в состоянии выделить и получить только содержимое ячейки (конечно же в RTF формате) без сетки таблицы (рамки вокруг ячейки).

Ещё раз спасибо за отклик.

P.S. Нашел вариант, который выделяет только форматированный текст (только столбец 1, строка 1):
MSWord.Selection.SelectCell;

(MSWord это - MSWord := CreateOleObject('Word.Application') ; )

теперь ищу (и прошу помощи) как перемещать по ячейкам Selection
после того как выбрали таблицу для обработки
(Table := MSWord.ActiveDocument.Tables.Item(i TableChosen); )...


P.P.S. Microsoft сам не знает как работать с ячейками таблицы (см. http://msdn.microsoft.com/en-us/libr...datafromatable ) и предлагает преобразовать таблицу в текст с разделителями Tab и т.д..., а если ячейки объединены... преобразовать в HTML (это так, к слову, у меня простая таблица)...

Может кто-то подскажет более изящное решение.
Спасибо.

Последний раз редактировалось OlegVE; 23.11.2010 в 19:47. Причина: Добавление
OlegVE вне форума Ответить с цитированием
Старый 24.11.2010, 13:54   #4
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Спасибо тем, кто прочитал.
Тему можно закрыть, хотя нужного ответа не получил (см. ниже).
Задам вопрос в другом месте.
Спасибо.

P.P.P.S. ПРОШУ ПРОЩЕНИЯ !!! ЗАДАЧА РЕШЕНА !!!

Ответ получил. Ещё раз спасибо Sibedir.

Использовал
Table.Cell(jGridCols, iGridRows).Select;
MSWord.Selection.SelectCell;
MSWord.Selection.MoveEnd(1,-1); // Вариант Sibedir тоже работает
MSWord.Selection.Copy;

(MSWord это - MSWord := CreateOleObject('Word.Application') ; )
(Table это - Table := MSWord.ActiveDocument.Tables.Item(i TableChosen); )

ПРОБЛЕМА: Наличие пустой ячейки в таблице, на ней всё и спотыкалось и выскакивала выше упомянутая ошибка ("Метод или свойство недоступны, поскольку выделенный текст отсутствует"). Минут 15 нажимал F7 пока не добрался до этой ячейки.

Надо просто проверить, например так:
if not VarIsEmpty(Table.Cell(jGridCols, iGridRows).Range.FormattedText) then
begin
...
прежде чем копировать Selection.

Последний раз редактировалось OlegVE; 25.11.2010 в 12:59.
OlegVE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с Microsoft Word. baryshnya Microsoft Office Word 4 30.08.2010 10:47
TMemoryStream vs Microsoft Word 095 Общие вопросы Delphi 0 26.04.2010 11:07
Таблицы и RichEdit Olaf Общие вопросы C/C++ 1 09.04.2010 12:17
Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD prikolist Microsoft Office Word 6 21.11.2008 13:17