Sub markBooks3 End Sub Sub makeUniquePages Dim pageStyleBreaks As Variant pageStyleBreaks = getPageStyleBreaks() Dim pageCount As Integer Dim i As Integer 'Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) pageCount = thiscomponent.currentController.pageCount Dim styleNames(pageCount - 1) As String For i = 0 To pageCount - 1 If i = 0 Then EndIf Next i End Sub Function getPageStyleBreaks() Dim enum1 As Object Dim enum1Element As Object Dim pageStyleName As String Dim pageNumber As Integer Dim pageName As String Dim oViewCursor As Object Dim anchor As Object Dim oSavePosition As Object Dim pageStyleBreaks(1) As Variant Dim pageStyleNames() As String Dim pageNumbers() As Integer oViewCursor = ThisComponent.CurrentController.getViewCursor() enum1 = ThisComponent.Text.createEnumeration() Dim i As Integer i = 0 Dim first As Boolean first = true While enum1.hasMoreElements enum1Element = enum1.nextElement If enum1Element.supportsService("com.sun.star.text.Paragraph") OR enum1Element.supportsService("com.sun.star.text.TextTable") Then If enum1Element.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE AND NOT IsMissing(enum1Element.PageDescName) AND NOT IsNull(enum1Element.PageDescName) AND NOT IsEmpty(enum1Element.PageDescName) Then pageStyleName = enum1Element.PageStyleName addToArray(pageStyleNames(),pageStyleName) oViewCursor.goToRange(enum1Element.Anchor,false) addToArray(pageNumbers(),CInt(oViewCursor.Page)) first = false ElseIf first Then addToArray(pageStyleNames(), enum1Element.PageStyleName) addToArray(pageNumbers(),1) first = false EndIf EndIf i = i + 1 Wend pageStyleBreaks(0) = pageStyleNames pageStyleBreaks(1) = pageNumbers getPageStyleBreaks = pageStyleBreaks End Function Sub setUniqPageStyles Dim prevPageName As String Dim firstPageName As String Dim pageName As String Dim curPageNum As Integer Dim prevPageNum As String Dim leftPageNum As Long Dim docPages As Long Dim articlePages As Long Dim previousPageStyle As Object Dim pageStyles As Object Dim curPageStyle As Object Dim curPageStyleName As String Dim nextStyle As Object Dim clonedStyle As Object Dim clonedStyleName As String Dim oViewCursor As Object Dim pageNum As Integer Dim page As Integer oViewCursor = ThisComponent.CurrentController.getViewCursor() pageStyles = ThisComponent.StyleFamilies.getByName("PageStyles") pageNum = 1 pageName = "Страница издания" If NOT hasPageStyleWith(pageName) Then MsgBox "Ошибка. Стиль страниц <" & pageName & "> не найден." Exit Sub EndIf page = findFirstPageNumberWithStyle(pageName) firstPage = page oViewCursor.jumpToPage(page) curPageStyleName = oViewCursor.PageStyleName Do While StrComp(curPageStyleName,pageName,1) = 0 If pageNum = 1 Then oViewCursor.jumpToPreviousPage() prevPageName = oViewCursor.PageStyleName previousPageStyle = pageStyles.getByName(prevPageName) tmpName = pageName + " " If InStr(prevPageName, tmpName) = 1 Then startNum = Right(prevPageName,Len(prevPageName) - Len(tmpName)) pageNum = CInt(startNum) + 1 EndIf oViewCursor.jumpToNextPage() EndIf newPageName = pageName + " " + pageNum createPageStyleByExample(newPageName) If pageNum = 1 Then oTextCursor = oViewCursor.Text.CreateTextCursorByRange(oViewCursor) oViewCursor.PageDescName = newPageName Else previousPageStyle.FollowStyle = newPageName EndIf curPageStyle = pageStyles.getByName(newPageName) 'Установим стиль следующей страницы в стандартное значение curPageStyle.FollowStyle = pageName previousPageStyle = curPageStyle oViewCursor.jumpToNextPage() curPageStyleName = getNextPageStyleName() pageNum = pageNum + 1 Loop End Sub Function hasPageStyleWith(pageStyleName) Dim enum1 As Object Dim enum1Element As Object Dim curPage As String Dim curStyleName As String Dim pageName As String Dim oViewCursor As Object Dim anchor As Object enum1 = ThisComponent.Text.createEnumeration() While enum1.hasMoreElements enum1Element = enum1.nextElement If enum1Element.supportsService("com.sun.star.text.Paragraph") OR enum1Element.supportsService("com.sun.star.text.TextTable") Then If NOT IsMissing(enum1Element.PageDescName) AND NOT IsNull(enum1Element.PageDescName) Then pageName = CStr(enum1Element.PageDescName) If pageStyleName = pageName Then hasPageStyleWith = true Exit Function EndIf EndIf EndIf Wend hasPageStyleWith = false End Function Function findFirstPageNumberWithStyle(pageStyleName) Dim enum1 As Object Dim enum1Element As Object Dim curPage As String Dim curStyleName As String Dim pageName As String Dim oViewCursor As Object Dim anchor As Object Dim oSavePosition As Object oViewCursor = ThisComponent.CurrentController.getViewCursor() oSavePosition = oViewCursor.Text.createTextCursorByRange(oViewCursor) enum1 = ThisComponent.Text.createEnumeration() While enum1.hasMoreElements enum1Element = enum1.nextElement If enum1Element.supportsService("com.sun.star.text.Paragraph") OR enum1Element.supportsService("com.sun.star.text.TextTable") Then If NOT IsMissing(enum1Element.PageDescName) AND NOT IsNull(enum1Element.PageDescName) Then pageName = CStr(enum1Element.PageDescName) If pageStyleName = pageName Then anchor = enum1Element.getAnchor() oViewCursor.gotoRange(anchor,false) findFirstPageNumberWithStyle = oViewCursor.getPage() oViewCursor.goToRange(oSavePosition, false) Exit Function EndIf EndIf EndIf Wend findFirstPageNumberWithStyle = -1 End Function sub testStyleCopy rem ---------------------------------------------------------------------- rem define variables dim document as object dim dispatcher as object rem ---------------------------------------------------------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ---------------------------------------------------------------------- dim args1(1) as new com.sun.star.beans.PropertyValue args1(0).Name = "Param" args1(0).Value = "alb2" args1(1).Name = "Family" args1(1).Value = 8 dispatcher.executeDispatch(document, ".uno:StyleNewByExample", "", 0, args1()) end sub