Форум » [x]Harbour » Word » Ответить

Word

fil: Всем, привет ! Понадобилось сделать слияние .DOC файлов. Соответственно, открываю через CreateObject файл приемник и копирую в него файлы источники. Как правильно описать команды ВЫДЕЛИТЬ ВСЕ (select.wholestory) и копирования этого select'a в клипбоард(select.copy) в xHarbour ?

Ответов - 8

Andrey: Сам 3 года назад мучился. Но проблему решить помогли. Поищи на форуме, была такая тема ! У себя нашел конечный исходник, но уже не помню. Сам проверяй ! /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= От: Дмитрий Громов Написано: 27 августа 2007 г. Тема: Копирование нескольких файлов MS WORD *.DOC в один файл --====----====----====----====----====----====----====----====----====----===-- */ #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

fil: Благодарю, полезная инфа

fil: При копии Excel таблицы в документ Word вместо дат получаю ####, хотя перед копирование формат ячеек даты меняю на "Основной" и пишу туда дату в символьом виде(с числами я так разобрался). Может кто сталкивался ?


fil: Нет ли у кого примерчика работы с таблицами Word'a .. Интересует такой вопрос : Копируем таблицу Excel в раздел документа Word. Соответственно этом разделе появится таблица oSdc:=oWrd:ActiveDocument oRng:=oSdc:Content ............................ Копируем таблицу Excel ............................ в результате - oRng:Tables():Count=1 Как я могу получить эту таблицу как объект(обращения типа oRng:Tables(1) дают ошибку) ?

fil: Вопрос с таблицами решил. Вопрос снят

fil: Копирую фрагмент таблицы Excel в Word и в цикле считываю ширины колонок новой таблицы Worda, однако, вместо величины в сантиметрах получаю некое значение превышающее реальную ширину колонки(скорее всего в пикселях). При попытке сконвертить это значение через oWrdApp:PointToCentimeters(значение) получаю ошибку метода. Как можно определить реальную ширину колонки ?

Sikambr: Как в MSWord-файле заменить текст? Если вызвать oWord:Selection:Find:Execute() то текст ищется, а чтобы заменялся текст, нужно Execute(Replace := wdReplaceAll)или Execute Replace := wdReplaceAllИсходный код прилагаю: PROCEDURE Main() LOCAL oWord, oText IF ( oWord := win_oleCreateObject( "Word.Application" ) ) != NIL // oWord:Documents:Add(FilePath(HB_PROGNAME()) + "Dogovor.doc") oWord:Documents:Add() oWord:Selection := "test" + hb_eol() + "address" + hb_eol() + "FIO" MSWord_Replace(oWord, "address", "Кривенко 10") // MSWord_Replace(oWord, "FIO", "Балаганов") oWord:Visible := .T. oWord:WindowState := 1 /* Maximize */ ELSE ? "Error. MS Word not available.", win_oleErrorText() ENDIF RETURN #define wdFindContinue 1 #define wdReplaceAll 2 STATIC PROCEDURE MSWord_Replace(oWord, cFind, cReplace) LOCAL oFind oFind := oWord:Selection:Find oFind:ClearFormatting() oFind:Text := cFind oFind:Replacement:Text := cReplace oFind:Forward := .T. oFind:Wrap := wdFindContinue oFind:Format := .F. oFind:MatchCase := .F. oFind:MatchWholeWord := .T. oFind:MatchWildcards := .F. oFind:MatchSoundsLike := .F. oFind:MatchAllWordForms := .F. oFind:Execute() // oFind:Execute(Replace := wdReplaceAll) << нужно вызвать так RETURN

fil: Типа так Selection.TypeText("Hello")



полная версия страницы