Автор | Сообщение |
|
| постоянный участник
|
Пост N: 263
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.03.07 08:32. Заголовок: Как объединить DOC файлы с различной ориентацией страницы ?
Народ, так кто может подсказать как объединить несколько DOC файлов имеющих различные типы ориентации: 1-файл КНИЖНЫЙ 2-3 файл АЛЬБОМНЫЙ 4-файл КНИЖНЫЙ ------------------ Т.е. в ниже перечисленной программе почему-то не переключаются на другую ориентацию страницы. #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") 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 := oWord:Documents oDocs:Open( cFile ) ENDIF NEXT oDocs := oWord:Documents: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,nRightMargin 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 := oWord:Documents 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
|
|
|
Ответов - 7
[только новые]
|
|
|
| |
Пост N: 648
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.03.07 09:24. Заголовок: Re:
|
|
|
|
| постоянный участник
|
Пост N: 264
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.03.07 22:48. Заголовок: Re:
А там так много чего, а нужно всего одну проблему решить. Но если считаешь что должно быть продолжение темы, то перекинь пожалуйста эту тему туда.
|
|
|
|
| постоянный участник
|
Пост N: 269
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.03.07 23:51. Заголовок: Re:
Слушайте, так можно и в отпуск сходить, пообещав шефу сделать объединение потом. А когда вернешься и не знаешь что придумать. Неужели никто не сталкивался с такой проблемой ?
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 25.10.06
|
|
Отправлено: 15.03.07 07:15. Заголовок: Re:
Для каждого файла следует делать свой раздел со своим форматом и в него копировать источники, тогда будет возможна различная ориентация в конечном файле.
|
|
|
|
| постоянный участник
|
Пост N: 270
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.03.07 14:13. Заголовок: Re:
А подправить мой исходник можно ? А то не совсем понятно как это делается.
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 25.10.06
|
|
Отправлено: 15.03.07 14:50. Заголовок: Re:
Сначла сделай сам такой файл на ворде потом эти действия в макрос и переложи. Я сам не пробовал, извини, нет времени, но мне кажется, что это именно то что надо. Дело в формате форда, где формат раздела - определяет формат страниц в этом разделе.
|
|
|
|
| постоянный участник
|
Пост N: 283
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.05.07 03:32. Заголовок: Re:
Кому будет интересно, но то-что я хотел, мне помогли сделать. Спасибо Диме Громову, это он мне помог. (Опять Дима...., наверно они лучше разбираются ....) Исходный текст с его комментариями: ------------------------------------------------ #define wdSectionBreakNextPage (2) #define wdCollapseStart (1) #define wdCollapseEnd (0) #define wdWindowStateMaximize (1) #define wdDoNotSaveChanges (0) FUNCTION MAIN() // LOCAL cPathDoc := SUBSTR(EXENAME(), 1, RAT("\",EXENAME() ) ) LOCAL aDocFile := {"file0.doc","file1.doc","file2.doc","file3.doc","file4.doc","file5.doc","file6.doc","file7.doc"} LOCAL cResDocFile := "file_All.doc" // LOCAL nDoc, cFile LOCAL oWord, oDocs, oDoc, oResDoc, oFont, oRange, oSect, oHdr, oPageNums // // REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") // TRY oWord := GetActiveObject( "Word.Application" ) CATCH TRY oWord := CreateObject( "Word.Application" ) CATCH Alert( "ERROR ! WinWord not installed properly [" + Ole2TxtError()+ "]" ) RETURN NIL END END // oDocs := oWord:Documents // // Create resulting doc as new doc in WinWord cFile := cPathDoc + cResDocFile ? "Create file: " + HB_ANSITOOEM( cFile ) oDocs:Add() oResDoc := oWord:ActiveDocument // oRange := oResDoc:Content // !! Use this, NOT a Selection expanded by WholeStory oFont := oRange:Font oFont:Name := "Arial" oFont:Size := 8 oFont:Bold := .T. oRange:Collapse (wdCollapseEnd) // move insertion cursor to the end of document oRange:InsertAfter( "Concatenating WinWord files with xHarbour" ) // oResDoc:SaveAs( cFile ) // ? "Copy and Paste Documents by ClipBoard" // FOR nDoc := 1 TO LEN( aDocFile ) // cFile := cPathDoc + aDocFile[nDoc] ? "Add file: " + HB_ANSITOOEM( cFile ) IF ! FILE(cFile) ALERT("; File " + HB_ANSITOOEM( cFile ) + " not found; ",{"Skipped"} ) ELSE // // Copy the content of next doc to clipboard oDoc := oDocs:Open( cFile ) oDoc:Content():Copy() oDoc:Close( wdDoNotSaveChanges ) // Close doc to add // // Insert the content of next doc from clipboard into resulting doc // oRange := oResDoc:Content // !! Use this, NOT a Selection expanded by WholeStory oRange:Collapse (wdCollapseEnd) // !! Move insertion cursor to the end of document oRange:InsertParagraph() // oRange:Collapse (wdCollapseEnd) // move insertion cursor to the end of document // !! DON'T use ordinal PAGE-break [chr(12)]. Add special SECTION-break // to end of resulting document BEFORE adding the content of next document oRange:InsertBreak (wdSectionBreakNextPage) // oRange:Collapse (wdCollapseEnd) // move insertion cursor to the end of document // Insert the content of next document from clipboard // !! Use Word97-compatible Paste method instead of WordXP-specific PasteAndFormat method oRange:Paste() // Now oRange range expands exactly to the content added from next document // // Reset the page numbering for all sections of content added // to provide the continuous page numbering for whole document // FOR EACH oSect IN oRange:Sections // // Reset the page numbering for headers of section FOR EACH oHdr IN oSect:Headers oPageNums := oHdr:PageNumbers oPageNums:RestartNumberingAtSection := .F. oPageNums:StartingNumber := 0 NEXT // oHdr // // Reset the page numbering for footers of section FOR EACH oHdr IN oSect:Footers oPageNums := oHdr:PageNumbers oPageNums:RestartNumberingAtSection := .F. oPageNums:StartingNumber := 0 NEXT // oHdr NEXT // oSect // ENDIF NEXT // nDoc // cFile := oResDoc:FullName ? "Save file: " + HB_ANSITOOEM( cFile ) oResDoc:Save() // ? "Activate document: " + HB_ANSITOOEM( cFile ) oResDoc:Windows[1]:Activate() // oWord:Visible := .T. oWord:WindowState := wdWindowStateMaximize // ? "Quit programm" ? // RETURN NIL // MAIN
|
|
|
|