1.doc+2.doc+3.doc+4.doc=All.doc
через OLE-объект.
// массив файлов
aFileDoc := {"test1.doc","test2.doc","test3.doc","test4.doc"}
// результирующий файл
cFileDocAll := "All_test.doc"
Если doc файлы различаются оформлением (поля и ориентацией), то при копировании
в один файл нужно сохранить оформление, т.е.
1-файл книжная оринт., 2-альбомная, 3-альбомная, 4-книжная.
Результирующий файл - книжный.
Как сохранить ориентацию у страниц.
И желательно в результирующем файле сделать "нумерацию страниц".
Заранее спасибо за ответ.
через OLE-объект.
// массив файлов
aFileDoc := {"test1.doc","test2.doc","test3.doc","test4.doc"}
// результирующий файл
cFileDocAll := "All_test.doc"
Если doc файлы различаются оформлением (поля и ориентацией), то при копировании
в один файл нужно сохранить оформление, т.е.
1-файл книжная оринт., 2-альбомная, 3-альбомная, 4-книжная.
Результирующий файл - книжный.
Как сохранить ориентацию у страниц.
И желательно в результирующем файле сделать "нумерацию страниц".
Заранее спасибо за ответ.
Так как же это делается руками - выделить весь документ, скопировать, отформатировать, установить настройки страницы. Другого способа не существует.
Нифига себе руками !!! А OLE на что ?
На Делфи делается, мне знакомый показывал типовые примеры.
На xHarbour тоже делается, только коряво (не знаю почему, я его слабо знаю). А вы говорите - руками.
Вопрос и задан был как на C это сделать ?:)
ИМХО самое простое решение :)
ну вот и бери в руки типовые примеры и делай, как сказал _kot:
выделить весь документ, скопировать, отформатировать, установить настройки страницы.
Кот, ты не прав !!!! :) :mad: :)
Я сам сделал программу на Harbour'e. Это новый "Open Source xBase WIN32"
язык, который транслирует Clipper PRG-файлы в С, а далее собираем С-файлы на BCC++ 5.51
Но у меня WORD OLE не переключает страницу с книжной на альбомную.
Привожу свой работающий исходник.
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
Угу. В третий раз размести одно и тоже сообщение в теме с подобным форматированием и получишь при-и-и-и-з! :D
Уж сколько раз твердили миру - хотить доказать мою личную не правоту - используйте ПМ. Нет надо разместить аж два огромных сообщения, что бы я обратил внимание. Обратил. Не обессудь.
Во первых - убедительная просьба использовать форматирование для кода. Это раз.
Во вторых - то что у меня не всегда хватает времени выдать нарушение сразу, это не говорит о том что я не сделаю это позднее. Особенно если первое не будет выполнено в течении 2-х дней (т.е. в среду)
В третьих - какое отношение имеет Harbour к теме топика собственно не понятно. Этот раздел форума посвящен программированию на С++Билдер. Но даже суть не в этом - в чем я не прав? По сути что делаешь ты - открываешь документ, выделяешь текст и копируешь в результирующий документ. Что и было сказано тебе:
Не верно только, что это единственный способ. Но это собственно к делу не относится и легче бы тебе от этого не стало.
Потому как самое простое - запустить ворд, включить запись макроса и выполнить все необходимые действия, а затем - посмотреть получившийся код и воспроизвести его в своей программе адаптировав на С++.
Что сложного? В общем до среды. Одно свое сообщение ты удаляешь - на выбор :) - оставшееся приводишь в приличный вид.
Взял на последнем тексте программы сделал форматирование, кликаешь на кнопку отправить, а она в теме уже без форматирования.
Может я что-то не "догоняю" ?
Вопрос был поставлен: КАК ОБЪЕДЕНИТЬ ФАЙЛЫ ? т.е. нужен был примерный исходник.
Ответ был: РУЧКАМИ и больше никак.
Из-за этого появился HARBOUR, я на нем работаю. Но он-прослойка, т.к. генерирует С-код для BORLAND C++
Из-за это-го я в этой конференции, все равно на С переходить, да и на форуме очень много спецов.
Вот и надеюсь, что кто-нибудь из ГУРУ подскажет как правильно написать програмульку для объединения файлов через OLE.
Взял на последнем тексте программы сделал форматирование, кликаешь на кнопку отправить, а она в теме уже без форматирования.
Может я что-то не "догоняю" ?
Исправил. Впредь не стесняйся использовать теги [ code ][ /code ]. Потренироваться можно здесь
Вопрос был поставлен: КАК ОБЪЕДЕНИТЬ ФАЙЛЫ ? т.е. нужен был примерный исходник.
Ответ был: РУЧКАМИ и больше никак.
Ответ был - так же как и ручками. По этому вопросу смотри предыдущий пост. Так же можно попытаться найти формат вордовского документа и попытаться работать с ним в бинарном режиме.
Т.е. с проблемой ты разобрался и тему можно закрывать?
ты в теме о BuilderC++. открой эту IDE, там в палитре компонентов есть закладочка, называется Office2k. вот там СТОЛЬКО компонентов. и для Word и для Excel... в общем копай в ту сторону... читай справку, понадобится справка по компонентам... хотя не особо, всё что от них требуется это просто выполнять VBA для документа.... в общем понадобится справочка по VBA (в Word найдёшь)...
как раз справочку по тем действиям что назвал _kot и ищи... как это с делать средствами VBA, а соотвессно и этими компонентами с помощью OLE )
"бубен" - самый зашибенный инструмент программиста.