Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Вывести текст в Word


Автор: Нитонисе 28.12.2009, 14:22
Есть компонент RichEdit, заполненный некоторым текстом в обогащенном формате. Как его вывести в Word?

Кроме того хотелось бы понять общий принцип формирования Word-документа из моего приложения. Кроме текста хотелось бы вставлять некоторые изображения, формировать таблицы. Где об этом можно почерпнуть информацию?

Автор: smoke_man 28.12.2009, 14:25
Посмотри http://wladm.narod.ru/Borland/word.html

Добавлено через 9 минут и 52 секунды
Можно еще у Архангельского почитать - А.Я. Архангельский "Программирование в C++ Builder 6".

Автор: Нитонисе 28.12.2009, 14:51
А компоненты с вкладки ьилдера Office2k для чего? В данной статье они не рассматриваются. И кстати пример, который там приведен для Word - не работает.

Автор: smoke_man 28.12.2009, 14:59
Посмотри http://forum.sources.ru/index.php?showtopic=51366 Просто можно работать напрямую через OLE, либо пользовать компоненты.

Автор: Нитонисе 28.12.2009, 15:18
Цитата(smoke_man @  28.12.2009,  14:59 Найти цитируемый пост)
Посмотри тут. Просто можно работать напрямую через OLE, либо пользовать компоненты.

И тут примеры не работают.

Добавлено через 9 минут и 48 секунд
Вот пробую посмотреть как работает пример. Создаю новый проект, добавляю WordApplication (WApp) и WordDocument (WDoc). Кнопка Button и ее обработчик:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleVariant FileName;
OleVariant oldStr,newStr;
OleVariant EmptyPar=False;
OleVariant Yes=True;
FileName=GetCurrentDir()+"\\test.doc";
WApp->Visible=false;
WApp->Caption = StringToOleStr("Îò÷åò");
WApp->Documents->Add(FileName,EmptyParam);
WDoc->ConnectTo(WApp->ActiveDocument);
}
Компилятор на строчке "WApp->Visible=false;" показывает ошибку - [C++ Error] Unit1.cpp(25): E2247 'TWordApplication::Visible' is not accessible

Автор: smoke_man 28.12.2009, 15:46
Попробуй так:
Код

OleVariant FileName;
OleVariant oldStr,newStr;
OleVariant EmptyPar=False;
OleVariant Yes=True;
FileName=GetCurrentDir()+"\\test.doc";
WApp->set_Visible( false);
WApp->set_Caption(L"blablabla");
WApp->Documents->Add(FileName,EmptyParam);
W->ConnectTo(WApp->ActiveDocument);

Автор: Usper 29.12.2009, 11:42
Всё на сайте Wlada`а работает. Смотри мой пост тута: http://forum.vingrad.ru/forum/topic-284673/kw-wordapplication.html Здесь, правда, вывод таблицы, а не текста, как выводить текст смотри сайт Wlada.

Автор: Нитонисе 5.1.2010, 14:46
А может кто нибудь просто выложить кусочек кода, который открывает ворд и закидывает туда текст из RichEdit? Например эти действия будут происходить по нажатию кнопки.

Автор: Нитонисе 5.1.2010, 15:24
Почему не работает вот этот кусочек кода?
Код

Variant VWord;
Variant VDoc;
VWord=CreateOleObject("Word.Application");
VWord.OlePropertySet("Visible",true);
VWord.OlePropertyGet("Documents").OleProcedure("Add");
VDoc=VWord.OlePropertyGet("Documents").OleFunction("Item",1);
VDoc.OlePropertyGet("Paragraphs").OleProcedure("Add");

Выскакивает ошибка на строчке - VDoc.OlePropertyGet("Paragraphs").OleProcedure("Add"); - с сообщением "Вызов был отклонен"? класс ошибки - EOleSysError

Автор: Usper 8.1.2010, 19:52
Какая версия билдера и ворда? У меня этот кусок кода замечательно работает, но я уже сталкивался с тем, что код, нормально работающий с 2003 офисом, отказывается работать с 2007 в некоторых случаях :(. Причём код на Visual Basic, генерируемый при записи макроса, и впоследствии используемый для перевода в С++, одинаков, что для 97 ворда, что для 2007.

Автор: Нитонисе 8.1.2010, 19:54
Цитата(Usper @  8.1.2010,  19:52 Найти цитируемый пост)
Какая версия билдера и ворда?

Ворд 2002, а билдер 2006. 
Вобщем-то решил проблему вывода текста через компоненты билдера, не используя напрямую OLE.

Автор: Usper 8.1.2010, 19:57
На крайний случай, можно просто сохранить содержимое RichEdit в rtf-файл и передать этот файл ворду smile.

Автор: Нитонисе 8.1.2010, 20:05
Цитата(Usper @  8.1.2010,  19:57 Найти цитируемый пост)
На крайний случай, можно просто сохранить содержимое RichEdit в rtf-файл и передать этот файл ворду
Наверное можно, но у меня в генерируемом ворд-документе должны быть не только содержимое этого ричэдита, но и таблицы и картинки... вобщем через copy/paste вставляю данные из ричэдита, вроде нормально, только чего-то какие-то глюки связанные с непоследовательным рсаположением данных. Должны быть картинка, таблица, ричэдит. А получается картинка, ричэдит, таблица(



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)