Форум » [x]Harbour » Настройка формата листа DOC-файла... » Ответить

Настройка формата листа DOC-файла...

Andrey: Как сделать настройку формата страницы листа .DOC в зависимости от ширины таблицы ? Ширину своей таблицы уже знаю: [pre2]nWidthTsb := oBrw:GetAllColsWidth() // ширина всех колонок таблицы в пикселах[/pre2] Задаю поля страницы (но они в других единицах): [pre2] oWord:ActiveDocument:PageSetup:LeftMargin := 72.0 //~2.5 см // книжная ориентация oWord:ActiveDocument:PageSetup:Orientation := wdOrientPortrait // альбомная ориентация oWord:ActiveDocument:PageSetup:Orientation := wdOrientLandscape[/pre2] Сколько пикселов в формате А4 для книжной и альбомной ориентации листа ? Кто знает как это сделать ?

Ответов - 43, стр: 1 2 3 All

Dima: Sergy пишет: Тут есть Хотел я ему эту ссылку дать , но там же далеко не все функции...

Andrey: Спасибо ! Добавил к себе в документацию...

Sergy: Dima пишет: Хотел я ему эту ссылку дать , но там же далеко не все функции... После изучения "далеко не всех функций" есть смысл залезть в \hb\contrib\hbwin\*.* - там точно "всё есть".


Dima: Sergy пишет: там точно "всё есть" Тоже не рискнул дать ему этот вариант

Andrey: Сделал такую конструкцию: [pre2] Try oWord := CreateObject( "Word.Application" ) Catch cMsg := REPLICATE( "-._.", 16 ) + ";;" cMsg += SPACE( 5 ) + "On this computer MS Word is not installed !;;" cMsg += SPACE( 5 ) + " Error code [" + win_oleErrorText() + "];;" cMsg += SPACE( 5 ) + " Error code [" + Ole2TxtError() + "];;" cMsg += REPLICATE( "-._.", 16 ) + ";;" cMsg := AtRepl( ";", cMsg, CRLF ) MsgStop( cMsg , "Error!") Return .F. End Try[/pre2] Результат при отсутствии Ворда на компе: Получается, что можно пользоваться обеими функциями ? Непонятно получается. Я у себя в проекте указываю нужные мне библиотеки: -lminigui -ltsbrowse -lhbxlsxml -lhbwin А к проекту ещё добавляются библиотеки, в ходе компиляции ? Ole2TxtError() содержится в 2х библиотеках - hbole.lib и xhb.lib

Dima: Andrey пишет: hbole.lib gfilatov2002 пишет: Ожидал подобное замечание, поскольку произошел отказ от устаревшей библиотеки HbOLE И на хрена ты её туда лепишь теперь ?

Andrey: Dima пишет: И на хрена ты её туда лепишь теперь ? Ничего я не леплю. Вот читай что у меня в проекте: Andrey пишет: Я у себя в проекте указываю нужные мне библиотеки: -lminigui -ltsbrowse -lhbxlsxml -lhbwin Как другие библиотеки добавляются к моему проекту ?

Andrey: Опять вопрос по Ворду: Как сохранить активный документ ? Вот код:[pre2] ..... oWord := TOleAuto():New( "Word.Application" ) oDocs := oWord:Documents oDocs:Open( cFileDoc ) oActive := oWord:ActiveDocument oSelect := oWord:Selection oMarks := oActive:BookMarks MyDocFindRepl(oWord, aDocVal) // Функция поиска и замена простых переменных по тексту doc MyDocTable(oWord, oSelect, aDimDbf) // Функция поиска и замена для таблицы по тексту doc oWord:Visible := lActivate // значение равно .T. oWord:WindowState := 1 // Maximize oWord:Selection:HomeKey(6) // начало документа oActive:Saved := lSave // значение равно .T. oActive:SaveAs( cFileDoc ) // сохранить документ [/pre2] Файл не сохраняестя.... Что нужно добавить/исправить чтобы файл сохранялся ?

Pasha: Andrey пишет: Что нужно добавить/исправить чтобы файл сохранялся ? Наверное надо убрать эту строку: oActive:Saved := lSave // значение равно .T. А то как-то странно получается: после Saved:=.t. word знает, что документ уже сохранен. И зачем тогда удивляться, что по SaveAs он не сохраняется ? Только что же была установлена отметка, что уже и так.

Andrey: Pasha пишет: Наверное надо убрать эту строку: Да перенес это из какого то проекта давно уже. А запись и не нужна была, так и кочевала из проекта в проект. Убрал. Заработало ! Спасибо большое !

Pasha: Andrey пишет: Да перенес это из какого то проекта давно уже. А запись и не нужна была, так и кочевала из проекта в проект. А вызов SaveAs тоже из другого проекта ? Ты если в ворде открываешь документ, изменяешь, потом сохраняешь его через Сохранить как ? Или просто Сохранить ? Тогда надо использовать не SaveAs, а Save

Andrey: Pasha пишет: Тогда надо использовать не SaveAs, а Save Понял. Спасибо !!! Ещё один вопрос: Как сделать поиск замену в подвале документа ? В свое время (с твоей помощью) сделал поиск-замену по тексту: [pre2]/////////////////////////////////////////////////////////////////////////////////////////// // Функция поиска и замена простых переменных по тексту doc FUNCTION MyDocFindRepl(oWord, aDocVal) LOCAL nI, oFind, cFind, cReplace oFind := oWord:Selection:Find FOR nI := 1 TO LEN(aDocVal) cFind := UPPER(ALLTRIM(aDocVal[nI,1])) cReplace := CStr( aDocVal[nI,2] ) // стандартная функция перевода в текст oFind:ClearFormatting() oFind:Replacement:ClearFormatting() oFind:Text := cFind // пример "#M->Date1" oFind:Replacement:Text := cReplace // пример "01/01/2016" oFind:Forward := .T. //oFind:Wrap := 1 oFind:Wrap = wdFindContinue oFind:Format = .F. oFind:MatchCase = .F. oFind:MatchWholeWord = .F. oFind:MatchWildcards = .F. oFind:MatchSoundsLike = .F. oFind:MatchAllWordForms = .F. oFind:Execute(cFind,0,0,0,0,0,1,1,0,cReplace,wdReplaceAll) NEXT RETURN NIL[/pre2] А как делать в подвале документа - не знаю. Сейчас просто потребовалось.

Pasha: А что такое подвал документа ? В общем случае ответ простой. Как в ворде делается - так и через ole делать. Включить макросы, и..

Andrey: Pasha пишет: Как в ворде делается - так и через ole делать. Включить макросы, и.. Вот получил макрос: [pre2]Sub Макрос9_подвал() ' ' Макрос9_подвал Макрос ' If ActiveWindow.View.SplitSpecial <> wdPaneNone Then ActiveWindow.Panes(2).Close End If If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _ ActivePane.View.Type = wdOutlineView Then ActiveWindow.ActivePane.View.Type = wdPrintView End If ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader If Selection.HeaderFooter.IsHeader = True Then ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter Else ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader End If Selection.Font.Size = 10 Selection.TypeText Text:="Строка тест 1" Selection.TypeParagraph Selection.TypeText Text:="Строка тест 2" Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend Selection.HomeKey Unit:=wdLine, Extend:=wdExtend Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument End Sub[/pre2] Блин... и как его переделать под Харбор ?

Pasha: Ну взять и переделать. Тут и переделывать то ничего не надо. Какая строка вызывает затруднения ?

Andrey: Pasha пишет: Какая строка вызывает затруднения ? Вообще всё - темный лес сейчас для меня. Забыл уже как раньше переделывал... Уже года два/три не занимался макросами. Если не сложно, помоги пожалуйста.

Pasha: Andrey пишет: If ActiveWindow.View.SplitSpecial <> wdPaneNone Then Ну помоги я так понимаю научи, а не тупо папазавасюрешалматематику. Начнем с первой строки. oWindow := oActive:ActiveWindow If oWindow:View:SplitSpecial <> 0 для трансляции строки вида Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend надо найти описание метода MoveUp, и перевести ключевые параметры в позиционные

Andrey: Pasha пишет: а не тупо папазавасюрешалматематику. Да, да ... Есть такое... Я вот макрос сделал и не понимаю зачем этот ВЕРХНИЙ кусочек, по моему это не относиться к колонтитулу, а относится к перемещению по меню... Нашёл вот более правильное на VB: [pre2]Добавление текста в нижние колонтитулы документа: Следующий пример кода задает шрифт текста, который необходимо вставить в основной нижний колонтитул каждого раздела документа, а затем вставляет текст в нижний колонтитул. В этом примере кода используется активный документ. For Each section As Word.Section In Me.Application.ActiveDocument.Sections Dim footerRange As Word.Range = section.Footers(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary).Range footerRange.Font.ColorIndex = Word.WdColorIndex.wdDarkRed footerRange.Font.Size = 20 footerRange.Text = "Confidential" Next [/pre2] Правильно ли я мыслю или нет ? Или продолжать - сражаться с макросом ?

Pasha: Так подвал это нижний коллонититул, что ли ? Что вообще надо сделать ? А с макросом сражаться не надо. В макрос оформляются те команды, которые выполняет word, и которые можно повторить через ole. Поэтому надо включить макрос, выполнить только необходимые действия без лишних движений, и затем посмотреть, какими командами word их выполняет. Ну и просто повторить их.

Andrey: Pasha пишет: Так подвал это нижний коллонититул, что ли ? Что вообще надо сделать ? 1) Удалить то что там стоит (нижний колонтитул). 2) Вставить 10 шрифтом красным цветом 4 строчки - "Тест строка 1", "Тест строка 2", и т.д.



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