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


Автор: Red-Storm 1.8.2005, 19:56
Помогите пожалуйсто решить проблему.

Есть определённый список, в нём к примеру расположнеы следующие данные : Имя, Фамилия и персональный код человека. Есть MS Word документ в котором прописан скажем определённый бланк следующего вида :

Персональные Данные :

Имя : <Name>
Фамилия : <Surname>
Персональный код : <PersonalID>

Как сделать так, чтоб моя программа при открытии документа сама находила тэги <> и забивала вместо них одноимённые данные из списка ? Буду очень благодарен за помощь.

Если возможно подкиньте пример по возможности на CBuilder 6.

Автор: chaos 2.8.2005, 06:55
я в свое время когда писал на делфях пользовался компонентом EKRTF как раз умеет делать то что тебе надо, но вот не уверен что он есть для билдера



Добавлено @ 06:56
посмотри в гугле

Автор: Dubinsky 3.8.2005, 13:59
хмм такая же проблема ...

а в стандартных компонентах билдера разве нет компонентов для работы с Ворд доками ?
может кто с ними работал ?

Автор: chaos 3.8.2005, 14:06
Цитата(Dubinsky @ 3.8.2005, 13:59)
хмм такая же проблема ...

а в стандартных компонентах билдера разве нет компонентов для работы с Ворд доками ?
может кто с ними работал ?

ты смотрел что нибудь про компоненту EKRTF ?

Автор: Dubinsky 3.8.2005, 14:48
я ещё не занимаюсь решением этой проблемы , просматриваю инфу , прислушиваюсь ...

у Ворд дока есть такая фенька "merge field" она ... , чёрт , хз как она работает но чую это то что надо , есть у билдера компоненты работающие с Ворд доками - вывод почему и не использовать их с этой вот фенькой ?

а насчёт EKRTF они же как я понял с *.rtf работают я неправ ?

если да то смысл использования Ворд файла в его мощном редакторе (ну там картинку прилепил , красиво оформил , забил эдакий черновик открытки , затем по базе поскакал , вытянул там имя фамилию записал в соответствующие поля (merge field'ом если возможно) и послал на печать , получаем на выходе красиво оформленные письма скажем клиентам базы , на день рождения )

с *.rtf будет всё корявее но тоже в принципе вариант ...
Добавлено @ 14:52
ради интереса

http://ekrtf.code.net.ru/index.html

это он ?

Автор: Red-Storm 4.8.2005, 17:33
Цитата(Red @ 1.8.2005, 19:56)
Помогите пожалуйсто решить проблему.

Есть определённый список, в нём к примеру расположнеы следующие данные : Имя, Фамилия и персональный код человека. Есть MS Word документ в котором прописан скажем определённый бланк следующего вида :

Персональные Данные :

Имя : <Name>
Фамилия : <Surname>
Персональный код : <PersonalID>

Как сделать так, чтоб моя программа при открытии документа сама находила тэги <> и забивала вместо них одноимённые данные из списка ? Буду очень благодарен за помощь.

Если возможно подкиньте пример по возможности на CBuilder 6.

В итоге я пришёл к такой теме, но по чему-то ничего не работает. При нажатии на кнопку, пограмма пытается присоединиться к серверу Word'а и затем выдаёт диалог HRCHECK : где пытается доказать мне, что я задал ни те свойства WordApplication1, либо вообще их не указал.

Вид диалога такой :

'this->Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,
WritePasswrdTemplate, Format, Encoding, Visible,
(Word_2k::WordDocument**)&prop'):Type mismath.
@C:\program files\borland\cbuilder6\include\vcl\Word_2k.h/7261

если нажать на "N to continue" то выплывает есчо один диалог :

(this->get_ActiveDocument((Word_2k::WordDocument**)&prop)) Error: 800A1098
(-2146824040)@C:\program files\borland\cbuilder6\include\vcl\Word_2k.h/5165

Если честно, я вообще не понимаю что я не правильно делаю. посмотрите пожалуйсто в чём ошибка.

Код

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  OleVariant DocName;
  OleVariant ConfConv;
  OleVariant ReadOnly;
  OleVariant AddToRecFiles;
  OleVariant Psw;
  OleVariant PswTmp;
  OleVariant Revert;
  OleVariant WritePsw;
  OleVariant WritePswTmp;
  OleVariant Fmt;
  OleVariant replace;

  OleVariant RepLabel;
  OleVariant RepToText;
  OleVariant FinalFile;

   DocName   = "c:\\Blank.doc";
   ConfConv  = True;
   ReadOnly  = False;
   AddToRecFiles  = False;
   Psw    = "";
   PswTmp = "";
   Revert = False;
   WritePsw = False;
   WritePswTmp = False;
   Fmt = wdOpenFormatAuto;
   replace = wdReplaceAll;

   WordApplication1->Connect();
   WordApplication1->Documents->Open(DocName, ConfConv, ReadOnly,
   AddToRecFiles, Psw, PswTmp, Revert, WritePsw, WritePswTmp, Fmt);

   WordDocument1->ConnectKind = ckAttachToInterface;
   WordDocument1->ConnectTo(WordApplication1->ActiveDocument);

   RepLabel  = "TestLabel";
   RepToText = Edit1->Text;

   WordDocument1->Range(EmptyParam,EmptyParam)->Find-> Execute(RepLabel,EmptyParam,EmptyParam,EmptyParam,

   EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, RepToText,
   replace);

    FinalFile = "c:\\Output.doc";
    WordDocument1->SaveAs(FinalFile);
    WordDocument1->Close();
    WordApplication1->Application->Visible = True;

    OleContainer1->CreateLinkToFile(FinalFile, false);
    OleContainer1->Refresh();
}

//-----------------------------------------------------------------------------


Может это несовместимость с MS Office 2003 ? Или параметры чем отличаются ?

Автор: stmamont 7.1.2006, 09:31
ОЧень нужна какая нибудь документация по
WordApplication
WordDocument
и другим компонентам для работы с вордом!
помогите!

Автор: Partizan 7.1.2006, 22:48
ребят....почитайте доки по OLE Automation и без всяких компонентов работайте с MSWord....

Автор: stmamont 8.1.2006, 11:36
Сам отвечу на свой вопрос.
TWordApplication и TWordDocument
во многом (а может и во всем) повторяют работу в vba с word'ом.
Так что вся документация лежит в help'e vba в ворде.
Если до сих пор нужно могу выложить код для того что бы из программы можно
было бы заменить все определенные слова на другие в документе ворд.

//а вот по OLE Automation почитаю smile

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