M>А что ты конкретно хочешь, я писал прогу но только общался с excel'ем при помощи Varianta, но в принципе все в мире похоже, так что пиши может помогу.
Задача состоит в редактировании вордовского документа из вилдеровского приложение( поиск и замена какихто определенных слов )
И если можно какиенить ссылки где можно прочитать хорошую инфу о работе с офисом из билдера ( OLE Automation )
Программист — птица вольная, не пнешь — не полетит.
Здравствуйте AccessDenied, Вы писали:
AD>Здравствуйте Morpeh, Вы писали:
M>>А что ты конкретно хочешь, я писал прогу но только общался с excel'ем при помощи Varianta, но в принципе все в мире похоже, так что пиши может помогу.
AD>Задача состоит в редактировании вордовского документа из вилдеровского приложение( поиск и замена какихто определенных слов )
AD>И если можно какиенить ссылки где можно прочитать хорошую инфу о работе с офисом из билдера ( OLE Automation )
Начну с последнего:
Либо я плохо искал либо ... в общем толком лично я нечего не нашел, хотя искал я на русском языке, может у "буржуев" и есть чего, но зато много инфы по делфи, но вот вчем фишка разный способ написания у билдера и дефи в OLE, так что разбирался я собственными силами и встроенной справкой которая в данном вопросе мало чем помогла. советую тебе посмотреть в справке Пример по Variant::Exec() там ты найдешь как примерно вызвать Word и затем его закрыть, но не жди от нее многого самому придется много колупать, к тому же возможно будут непонятные ошибки как это было у меня это я тебе гарантирую (честно)
А вот тебе пример:
#include <utilcls.h> // добавь в начало, иначе не пойдет
...
...
/*
ниже идет код процедуры или функции это смотря как ты сам захочешь.
Сначала можешь попробовать просто на форме поставить кнопку и данный код выполнять по клику.
*/
Variant MSDoc;
Variant MSWord;
bool MSVisible;
AnsiString DocFileName;
/*
здесь показываю как открыть файл вордом так что либо скинь какой ни буть файл на диск С с именем Users.DOC или измени имя и путь в DocFileName
*/
DocFileName = "C:\\User.doc";
MSWord = CreateOleObject("Word.Application"); // вызов ворда
MSVisible = true; // если MSVisible == true то ворд будет видим иначе будет сидеть в темноте
MSWord.OlePropertySet("Visible", MSVisible); // примерно так и предется опщаться с вордом
/*
вот на этом праздник кончился ... начились будни...
надо искать нужные тебе команды VBasic'a, а как? я делал так: запускал Word запускал макрос и производил действия которые будет делать моя программа, затем заходил в редактор макросов и изучал команды VB, затем перекидывал их ворд путь долгий но рабочий например:
открытие документа (C:\User.doc) вордом в VB выгледит так:
ChangeFileOpenDirectory "C:\"
Documents.Open FileName:="User.doc", ConfirmConversions:=False, ReadOnly:= _
False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _
"", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto
а в билдере так:
*/
MSDoc = MSWord.OlePropertyGet("Documents").OleFunction("Open", DocFileName); // открытие документа
…
…
/*
Ну для начала хватит, если чего не понятно -> пиши
*/
MSWord.OleProcedure("Quit"); // сказать ворду чтобы "сваливал"
MSWord = Unassigned; // освободить переменную
Re[4]: Borland C++ Builder 5.0 with Word Documents
Я решил свою проблему используя классы TWordDocument и TWordApplication.
Возникла другая проблема:
После того, как мое приложение отредактировало документ, оно запускает еще один экземпляр Ворда и показывает в нем отредактированый документ. Затем приложение закрывается. Но в момент закрытия приложения, оно автоматически закрывает не только запущеный им экземпляр ворда, но и вообще все запущеные экземпляры Ворда.
Может кто знает, как сделать так, чтобы "Ворды" на закрывались ?
Программист — птица вольная, не пнешь — не полетит.
Re[5]: Borland C++ Builder 5.0 with Word Documents
Здравствуйте AccessDenied, Вы писали:
AD>Привет всем.
AD>Я решил свою проблему используя классы TWordDocument и TWordApplication.
AD>Возникла другая проблема: AD>После того, как мое приложение отредактировало документ, оно запускает еще один экземпляр Ворда и показывает в нем отредактированый документ. Затем приложение закрывается. Но в момент закрытия приложения, оно автоматически закрывает не только запущеный им экземпляр ворда, но и вообще все запущеные экземпляры Ворда.
AD>Может кто знает, как сделать так, чтобы "Ворды" на закрывались ?
Ты пример выше смотрел, вот там все работает правильно. И я там писал, что будут всякие ошибки, я сам лично много времени посвятил этому, перепробовал много всяких способов и все-таки остановился на Variant'e так как с ним проблем меньше. А что касается TWordDocument и TWordApplication то тут проблемы могут быть проблемы связанные с разными версиями офиса, сам сталкивался и поэтому начал искать другой способ, хотя если ты пишешь на конкретную конфу компа, то тогда ... Ну а вообще ты хоть кусок проги кинь, а то мне самому неохота писать, может, чем и помогу.
Re[6]: Borland C++ Builder 5.0 with Word Documents
AD>TWordApplication *WordApplication;
AD>TWordDocument *WordDocument;
AD>WordApplication = new TWordApplication(Owner);
AD>WordDocument = new TWordDocument(Owner);
AD>// open document
WordApplication->>Connect();
WordDocument->>ConnectTo(WordApplication->Documents->
AD> Open((OleVariant)strFileName));
WordApplication->>Visible = true; ///// А вот эта строчка у меня не пашит
WordDocument->>Activate();
AD>// editing .......
AD>// end
WordDocument->>Disconnect();
WordApplication->>Disconnect();
AD>
AD>После этого прога пытается закрыть вообще все открытые ворды
Ну а как ты хотел, ты ведь сам последней строчкой говоришь, чтобы сваливал весь ворд. я же писал как проще, если не взял бы да хоть проверил, мой способ сам бы убедился, к тому же он еще и быстрей с вордом работает. ну а вообще я не понял, зачем тебе открытый ворд, записал файл сделанный да и все, ну а если хочешь чтобы ворд не закрывался, то тебе надо либо на Variant переползать, либо, WordApplication не дисконестить а както по другому убивать, причем только указатель, а не сам ворд, либо писать какой-то обработчик на выход ворда.
Честно говоря меня твоя прога задела, я как на работу приехал так часа 4 сидел пытался, что либо придумать но ничего толкового не получилось. И к тому же я на днях перешел на BCB6. я еще попытаюсь, ну а если ты чего придумаешь, то напиши мне интересно!!!
С Уважением,
Morpeh
P.S.:
И всетаки посмотри мой пример, на мой взгляд проще будет.
Re[4]: Borland C++ Builder 5.0 with Word Documents
Здравствуйте, Morpeh, Вы писали:
M>>>А что ты конкретно хочешь, я писал прогу но только общался с excel'ем при помощи Varianta, но в принципе все в мире похоже, так что пиши может помогу.
M>#include <utilcls.h> // добавь в начало, иначе не пойдет M>DocFileName = "C:\\User.doc";
M>MSWord = CreateOleObject("Word.Application"); // вызов ворда M>MSVisible = true; // если MSVisible == true то ворд будет видим иначе будет сидеть в темноте
M> Ну для начала хватит, если чего не понятно -> пиши M>*/ M>MSWord.OleProcedure("Quit"); // сказать ворду чтобы "сваливал" M>MSWord = Unassigned; // освободить переменную
А не подскажите как установить ширину колонки в таблице Word.