On-line: Dr. Oldwarez, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост 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



Спасибо: 0 
Профиль
Ответов - 7 [только новые]


администратор




Пост N: 648
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.03.07 09:24. Заголовок: Re:


Andrey
Продолжал бы уже свою старую тему :)
http://clipper.borda.ru/?1-4-0-00000120-000-0-0-1166477111

Спасибо: 0 
Профиль
постоянный участник




Пост N: 264
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.03.07 22:48. Заголовок: Re:


А там так много чего, а нужно всего одну проблему решить.
Но если считаешь что должно быть продолжение темы, то перекинь пожалуйста эту тему туда.

Спасибо: 0 
Профиль
постоянный участник




Пост N: 269
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.07 23:51. Заголовок: Re:


Слушайте, так можно и в отпуск сходить, пообещав шефу сделать объединение потом.
А когда вернешься и не знаешь что придумать.
Неужели никто не сталкивался с такой проблемой ?

Спасибо: 0 
Профиль



Пост N: 4
Зарегистрирован: 25.10.06
ссылка на сообщение  Отправлено: 15.03.07 07:15. Заголовок: Re:


Для каждого файла следует делать свой раздел со своим форматом и в него копировать источники, тогда будет возможна различная ориентация в конечном файле.

Спасибо: 0 
Профиль
постоянный участник




Пост N: 270
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.07 14:13. Заголовок: Re:


А подправить мой исходник можно ?
А то не совсем понятно как это делается.

Спасибо: 0 
Профиль



Пост N: 5
Зарегистрирован: 25.10.06
ссылка на сообщение  Отправлено: 15.03.07 14:50. Заголовок: Re:


Сначла сделай сам такой файл на ворде
потом эти действия в макрос и переложи.
Я сам не пробовал, извини, нет времени, но мне кажется, что это именно то что надо.
Дело в формате форда, где формат раздела - определяет формат страниц в этом разделе.


Спасибо: 0 
Профиль
постоянный участник




Пост 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


Спасибо: 0 
Профиль
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 76
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет