Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

1.doc+2.doc+3.doc+4.doc=All.doc

20K
21 декабря 2006 года
Andrey_V
9 / / 21.12.2006
Кто может подсказать как объединить несколько WORD'овских файлов в один файл
через OLE-объект.

// массив файлов
aFileDoc := {"test1.doc","test2.doc","test3.doc","test4.doc"}
// результирующий файл
cFileDocAll := "All_test.doc"

Если doc файлы различаются оформлением (поля и ориентацией), то при копировании
в один файл нужно сохранить оформление, т.е.
1-файл книжная оринт., 2-альбомная, 3-альбомная, 4-книжная.
Результирующий файл - книжный.
Как сохранить ориентацию у страниц.

И желательно в результирующем файле сделать "нумерацию страниц".
Заранее спасибо за ответ.
1
23 декабря 2006 года
kot_
7.3K / / 20.01.2000
Цитата: Andrey_V
Кто может подсказать как объединить несколько WORD'овских файлов в один файл
через OLE-объект.

// массив файлов
aFileDoc := {"test1.doc","test2.doc","test3.doc","test4.doc"}
// результирующий файл
cFileDocAll := "All_test.doc"

Если doc файлы различаются оформлением (поля и ориентацией), то при копировании
в один файл нужно сохранить оформление, т.е.
1-файл книжная оринт., 2-альбомная, 3-альбомная, 4-книжная.
Результирующий файл - книжный.
Как сохранить ориентацию у страниц.

И желательно в результирующем файле сделать "нумерацию страниц".
Заранее спасибо за ответ.



Так как же это делается руками - выделить весь документ, скопировать, отформатировать, установить настройки страницы. Другого способа не существует.

20K
26 декабря 2006 года
Andrey_V
9 / / 21.12.2006
Цитата: kot_
Так как же это делается руками - выделить весь документ, скопировать, отформатировать, установить настройки страницы. Другого способа не существует.



Нифига себе руками !!! А OLE на что ?
На Делфи делается, мне знакомый показывал типовые примеры.
На xHarbour тоже делается, только коряво (не знаю почему, я его слабо знаю). А вы говорите - руками.
Вопрос и задан был как на C это сделать ?:)

9.5K
26 декабря 2006 года
Borgir
97 / / 20.12.2006
Ну если на Дельфи сделано, то давай дельфийские исходники (как звучит!). Переведем их на Билдер.
ИМХО самое простое решение :)
1.9K
27 декабря 2006 года
Anton Chik
175 / / 26.09.2005
Цитата: Andrey_V
мне знакомый показывал типовые примеры.


ну вот и бери в руки типовые примеры и делай, как сказал _kot:

Цитата:

выделить весь документ, скопировать, отформатировать, установить настройки страницы.

20K
14 января 2007 года
Andrey_V
9 / / 21.12.2006
Цитата: kot_
Так как же это делается руками - выделить весь документ, скопировать, отформатировать, установить настройки страницы. Другого способа не существует.



Кот, ты не прав !!!! :) :mad: :)

Я сам сделал программу на Harbour'e. Это новый "Open Source xBase WIN32"
язык, который транслирует Clipper PRG-файлы в С, а далее собираем С-файлы на BCC++ 5.51

Но у меня WORD OLE не переключает страницу с книжной на альбомную.
Привожу свой работающий исходник.

Код:
#define CRLF CHR(13)+CHR(10)

FUNCTION MAIN()
LOCAL oWord, oDocs, nI, oText, oDoc, nDoc
LOCAL nTopMargin,nBottomMargin,nLeftMargin,nRightMargin, nOrient
LOCAL aFileDoc := {"test1.doc","test2.doc","test3.doc","test4.doc "}
LOCAL cFileDocAll := "All_test.doc"
LOCAL cFile, cPathDoc := SUBSTR(EXENAME(), 1, RAT("\",EXENAME() ) )

REQUEST HB_CODEPAGE_RU866
hb_SetCodepage( "RU866" )
REQUEST HB_LANG_RU866
HB_LANGSELECT("RU866")

aFileDoc := {"file0.doc","file1.doc","file2.doc","file3.doc"," file4.doc","file5.doc","file6.doc","file7.doc"}
cFileDocAll := "file_All.doc"

TRY
     oWord := GetActiveObject( "Word.Application" )
CATCH
   TRY
       oWord := CreateObject( "Word.Application" )
   CATCH
       Alert( "ERROR ! WinWord not system. [" + Ole2TxtError()+ "]" )
    RETURN NIL
   END
END

FOR nI := 1 TO LEN(aFileDoc)
      cFile := cPathDoc + aFileDoc[nI]
      ? "Open file: " + cFile
      IF !FILE(cFile)
           ALERT("; Not file "+cFile+"; ",{"Skipped"} )
      ELSE
           oDocs := oWordocuments
          oDocs:Open( cFile )
      ENDIF
NEXT

oDocs := oWordocuments:Add()

oText := oWord:Selection()
oText:Font:Name := "Arial"
oText:Font:Size := 8
oText:Font:Bold := .T.
oText:TypeText ( HB_OemTOAnsi("Объединение файлов с помощью OLE - xHarbour'e" + CRLF) )
oText:TypeParagraph() /// !!!

cFile := cPathDoc + cFileDocAll
oDocs:SaveAs( cFile ) // Сохранить файл как .....

? "Copy ClipBoard and Paste New Document"

FOR nI := 2 TO LEN(aFileDoc)+1
         oWord:Windows[nI]:Activate()
         nOrient := oWord:Selection():PageSetup():Orientation()
         nTopMargin := oWord:Selection():PageSetup():TopMargin()
         nBottomMargin := oWord:Selection():PageSetup():BottomMargin()
         nLeftMargin := oWord:Selection():PageSetup():LeftMargin()
         nRightMargin := oWord:Selection():PageSetup():RightMargin()
         ? nOrient,nTopMargin,nBottomMargin,nLeftMargin,nRigh tMargin
         oText := oWord:Selection() ; oText:WholeStory() ; oText:Copy()

         oWord:Windows[1]:Activate()
        oWord:Selection():PageSetup():Orientation() := nOrient
        oWord:Selection():PageSetup():TopMargin() := nTopMargin
        oWord:Selection():PageSetup():BottomMargin() := nBottomMargin
        oWord:Selection():PageSetup():LeftMargin() := nLeftMargin
        oWord:Selection():PageSetup():RightMargin() := nRightMargin
        oText := oWord:Selection() ; oText:PasteAndFormat( 0 )
        oText:TypeText ( CHR(12) )
        oText:TypeParagraph()
NEXT

? "Save file "+HB_ANSITOOEM(cFile)
oDocs:Save() //сохраняем all_test

? "Close all files"
oDocs := oWordocuments
FOR each oDoc in oDocs
    oDoc:Close() //закрываем все
NEXT

? "Open document "+cFile
oDocs:Open( cFile ) // открываем all_test
oWord:Visible := .T.
oWord:WindowState := 1

//wait " Press any key closed for WinWord"
//oWord:Quit()
? "Quit programm"

RETURN NIL
1
16 января 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Andrey_V
Кот, ты не прав !!!!


Угу. В третий раз размести одно и тоже сообщение в теме с подобным форматированием и получишь при-и-и-и-з! :D
Уж сколько раз твердили миру - хотить доказать мою личную не правоту - используйте ПМ. Нет надо разместить аж два огромных сообщения, что бы я обратил внимание. Обратил. Не обессудь.

Во первых - убедительная просьба использовать форматирование для кода. Это раз.
Во вторых - то что у меня не всегда хватает времени выдать нарушение сразу, это не говорит о том что я не сделаю это позднее. Особенно если первое не будет выполнено в течении 2-х дней (т.е. в среду)

В третьих - какое отношение имеет Harbour к теме топика собственно не понятно. Этот раздел форума посвящен программированию на С++Билдер. Но даже суть не в этом - в чем я не прав? По сути что делаешь ты - открываешь документ, выделяешь текст и копируешь в результирующий документ. Что и было сказано тебе:

Цитата:
Так как же это делается руками - выделить весь документ, скопировать, отформатировать, установить настройки страницы.


Не верно только, что это единственный способ. Но это собственно к делу не относится и легче бы тебе от этого не стало.
Потому как самое простое - запустить ворд, включить запись макроса и выполнить все необходимые действия, а затем - посмотреть получившийся код и воспроизвести его в своей программе адаптировав на С++.
Что сложного? В общем до среды. Одно свое сообщение ты удаляешь - на выбор :) - оставшееся приводишь в приличный вид.

20K
16 января 2007 года
Andrey_V
9 / / 21.12.2006
Кот, извини за повторение. Пытался удалить ненужное сообщение, не удаляет.
Взял на последнем тексте программы сделал форматирование, кликаешь на кнопку отправить, а она в теме уже без форматирования.
Может я что-то не "догоняю" ?

Вопрос был поставлен: КАК ОБЪЕДЕНИТЬ ФАЙЛЫ ? т.е. нужен был примерный исходник.
Ответ был: РУЧКАМИ и больше никак.
Из-за этого появился HARBOUR, я на нем работаю. Но он-прослойка, т.к. генерирует С-код для BORLAND C++
Из-за это-го я в этой конференции, все равно на С переходить, да и на форуме очень много спецов.
Вот и надеюсь, что кто-нибудь из ГУРУ подскажет как правильно написать програмульку для объединения файлов через OLE.
1
16 января 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Andrey_V
Кот, извини за повторение. Пытался удалить ненужное сообщение, не удаляет.
Взял на последнем тексте программы сделал форматирование, кликаешь на кнопку отправить, а она в теме уже без форматирования.
Может я что-то не "догоняю" ?


Исправил. Впредь не стесняйся использовать теги [ code ][ /code ]. Потренироваться можно здесь

Цитата: Andrey_V

Вопрос был поставлен: КАК ОБЪЕДЕНИТЬ ФАЙЛЫ ? т.е. нужен был примерный исходник.
Ответ был: РУЧКАМИ и больше никак.


Ответ был - так же как и ручками. По этому вопросу смотри предыдущий пост. Так же можно попытаться найти формат вордовского документа и попытаться работать с ним в бинарном режиме.
Т.е. с проблемой ты разобрался и тему можно закрывать?

92
17 января 2007 года
Тень Пса
2.2K / / 19.10.2006
Цитата: Andrey_V
Вот и надеюсь, что кто-нибудь подскажет как правильно написать програмульку для объединения файлов через OLE.



ты в теме о BuilderC++. открой эту IDE, там в палитре компонентов есть закладочка, называется Office2k. вот там СТОЛЬКО компонентов. и для Word и для Excel... в общем копай в ту сторону... читай справку, понадобится справка по компонентам... хотя не особо, всё что от них требуется это просто выполнять VBA для документа.... в общем понадобится справочка по VBA (в Word найдёшь)...

как раз справочку по тем действиям что назвал _kot и ищи... как это с делать средствами VBA, а соотвессно и этими компонентами с помощью OLE )

"бубен" - самый зашибенный инструмент программиста.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог