Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой пример работы с компонентами Word 
:(
    Опции темы
Нитонисе
Дата 5.1.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



На форме есть компоненты WordApplication1, WordDocument1, Edit1, Button1.
Обработчик нажатия на кнопке такой:
Код

WordApplication1->Connect(); 
WordApplication1->set_Visible(true);
WordApplication1->Documents->Add();
WordDocument1->ConnectTo(WordApplication1->ActiveDocument);
WordDocument1->Range(EmptyParam,EmptyParam)->InsertAfter(StringToOleStr(Edit1->Text));

Последней строчкой я пытаюсь вывести в ворде строку из эдита, но получаю вот такое сообщение

user posted image

Что тут не так делаю?

Это сообщение отредактировал(а) Нитонисе - 5.1.2010, 16:36
PM MAIL   Вверх
smoke_man
Дата 5.1.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



А так:
Код

WordDocument1->Range->InsertAfter(StringToOleStr(Edit1->Text));



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Нитонисе
Дата 6.1.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(smoke_man @ 5.1.2010,  23:16)
А так:
Код

WordDocument1->Range->InsertAfter(StringToOleStr(Edit1->Text));

Ошибка на этой строчке - [C++ Error] UMain.cpp(4198): E2288 Pointer to structure required on left side of -> or ->*
PM MAIL   Вверх
_Dimon_
Дата 6.1.2010, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Код

Range(EmptyParam,EmptyParam)


Если ти ставиш EmptyParam, значит тебе все равно куда запишется этот текст.
Напиши тогда 
Код

WordDocument1->Selection->InsertAfter(StringToOleStr(Edit1->Text));

это текущая позиция курсора в документе (если нет выделеного текста...)
PM MAIL   Вверх
Нитонисе
Дата 7.1.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(_Dimon_ @  6.1.2010,  22:57 Найти цитируемый пост)
Напиши тогда 

Немного изменил.
Код

WordApplication1->Selection->InsertAfter(StringToOleStr(Edit1->Text));

так как Selection не является членом WordDocument.
Теперь текст из эдита вставляется. Однако если после этого закрыть ворд и снова нажать на кнопку, чтобы ворд снова открылся и в него занеслась надпись из эдита, появляется вот такое сообщение. 

user posted image

Это что такое?
PM MAIL   Вверх
xvr
Дата 7.1.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата

Однако если после этого закрыть ворд и снова нажать на кнопку, чтобы ворд снова открылся и в него занеслась надпись из эдита, появляется вот такое сообщение. 
После закрытия Word'а все объекты, что были к нему прикреплены, становятся невалидными. Позовите Disconnect() от них всех перед повторным подключением


PM MAIL   Вверх
Нитонисе
Дата 7.1.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Да, теперь работает.
Такой вопрос, нужно из компонента RichEdit закинуть текст в ворд, причем соблюдая форматирование. То есть жирный шрифт должен быть жирным, цветной - уветным, отступы все, выравнивание и т.д. Как это сделать?
PM MAIL   Вверх
Нитонисе
Дата 7.1.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Код

WordApplication1->Disconnect();
WordApplication1->Connect();
WordApplication1->set_Visible(true);
WordApplication1->Documents->Add();
for (int i=0; i<RichEdit1->Lines->Count; i++)
  {
    WordApplication1->Selection->InsertAfter(StringToOleStr(RichEdit1->Lines->Strings[i]));
    WordApplication1->Selection->InsertAfter(StringToOleStr("\n"));
  }

Вот так получается все строки перекинуть из ричэдита в ворд, но тескт не форматирован. Как сохранить форматирование?
PM MAIL   Вверх
Нитонисе
Дата 7.1.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Форматирование можно сохранить скопировав текст из ричэдита в буфер и вставив в ворде.
Код

WordApplication1->Disconnect();
WordApplication1->Connect();
WordApplication1->set_Visible(true);
WordApplication1->Documents->Add();
RichEdit1->SelectAll();
RichEdit1->CopyToClipboard();
WordApplication1->Selection->Paste();

PM MAIL   Вверх
xvr
Дата 7.1.2010, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



RichEdit выдает на гора RTF текст ТОЛЬКО при операциях стриминга (RichEdit->Lines->SaveTo* & RichEdit->Lines->LoadFrom*)

PM MAIL   Вверх
Нитонисе
Дата 8.1.2010, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  7.1.2010,  23:45 Найти цитируемый пост)
RichEdit выдает на гора RTF текст ТОЛЬКО при операциях стриминга (RichEdit->Lines->SaveTo* & RichEdit->Lines->LoadFrom*)

Ясно. Ну я уже через копировать/вставить решил этот вопрос. Вполне приемлемо.
PM MAIL   Вверх
Данкинг
Дата 8.1.2010, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Нитонисе, а я с тобой уже делился "секретом", что если не знаешь, как написать ту или иную инструкцию в Word или Excel, то часто помогает создание макроса в самом Word, а потом переложение этого макроса в свою программу? Если не делился - то делюсь, а если делился - то извиняюсь за повторение. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.2068 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.