8f5e53fdf0
2004/06/16 12:02:39 bc 1.6.172.1: ##Service for presentationdocument added
522 lines
No EOL
16 KiB
XML
522 lines
No EOL
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="GetTexts" script:language="StarBasic">Option Explicit
|
|
' Macro-Description:
|
|
' This Macro extracts the Strings out of the currently activated document und inserts them into a logdocument
|
|
' The aim of the macro is to provide the programmer an insight into the StarOffice API
|
|
' It focusses on how document-Objects are accessed.
|
|
' Therefor not only texts of the document-body are retrieved but also Texts of general
|
|
' document Objects like, Annotations, charts and general Document Information
|
|
|
|
Public oLogDocument, oLogText, oLogCursor, oLogHeaderStyle, oLogBodyTextStyle as Object
|
|
Public oDocument as Object
|
|
Public LogArray(1000) as String
|
|
Public LogIndex as Integer
|
|
Public oLocHeaderStyle as Object
|
|
|
|
Sub Main
|
|
Dim sDocType as String
|
|
Dim oHyperCursor as Object
|
|
Dim oCharStyles as Object
|
|
BasicLibraries.LoadLibrary("Tools")
|
|
On Local Error GoTo NODOCUMENT
|
|
oDocument = StarDesktop.ActiveFrame.Controller.Model
|
|
sDocType = GetDocumentType(oDocument)
|
|
NODOCUMENT:
|
|
If Err <> 0 Then
|
|
Msgbox("This macro extracts all data from the active Writer, Calc or Draw document." & chr(13) &_
|
|
"To start this macro you have to activate a document first." , 16, GetProductName)
|
|
Exit Sub
|
|
End If
|
|
On Local Error Goto 0
|
|
|
|
' Open a new document where all the texts are inserted
|
|
oLogDocument = CreateNewDocument("swriter")
|
|
If Not IsNull(oLogDocument) Then
|
|
oLogText = oLogDocument.Text
|
|
|
|
' create and define the character styles of the Log-document
|
|
oCharStyles = oLogDocument.StyleFamilies.GetByName("CharacterStyles")
|
|
oLogHeaderStyle = oLogDocument.createInstance("com.sun.star.style.CharacterStyle")
|
|
oCharStyles.InsertbyName("Log Header", oLogHeaderStyle)
|
|
|
|
oLogHeaderStyle.charWeight = com.sun.star.awt.FontWeight.BOLD
|
|
oLogBodyTextStyle = oLogDocument.createInstance("com.sun.star.style.CharacterStyle")
|
|
oCharStyles.InsertbyName("Log Body", oLogBodyTextStyle)
|
|
|
|
' Insert the title of the activated document as a hyperlink
|
|
oHyperCursor = oLogText.createTextCursor()
|
|
oHyperCursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
|
|
oHyperCursor.gotoStart(False)
|
|
oHyperCursor.HyperLinkURL = oDocument.URL
|
|
oHyperCursor.HyperLinkTarget = oDocument.URL
|
|
If oDocument.DocumentInfo.Title <> "" Then
|
|
oHyperCursor.HyperlinkName = oDocument.DocumentInfo.Title
|
|
End If
|
|
oLogText.insertString(oHyperCursor, oDocument.DocumentInfo.Title, False)
|
|
oLogText.insertControlCharacter(oHyperCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
|
|
|
|
oLogCursor = oLogText.createTextCursor()
|
|
oLogCursor.GotoEnd(False)
|
|
' "Switch off" the Hyperlink - Properties
|
|
oLogCursor.SetPropertyToDefault("HyperLinkURL")
|
|
oLogCursor.SetPropertyToDefault("HyperLinkTarget")
|
|
oLogCursor.SetPropertyToDefault("HyperLinkName")
|
|
LogIndex = 0
|
|
|
|
' Get the Properties of the document Info
|
|
GetDocumentInfo()
|
|
|
|
Select Case sDocType
|
|
Case "swriter"
|
|
GetWriterStrings()
|
|
Case "scalc"
|
|
GetCalcStrings()
|
|
Case "sdraw", "simpress"
|
|
GetDrawStrings()
|
|
Case Else
|
|
Msgbox("This macro only works with a Writer, Calc or Draw/Impress document.", 16, GetProductName())
|
|
End Select
|
|
End If
|
|
End Sub
|
|
|
|
|
|
' ***********************************************Calc-Documents**************************************************
|
|
|
|
Sub GetCalcStrings()
|
|
Dim i, n as integer
|
|
Dim oSheet as Object
|
|
Dim SheetName as String
|
|
Dim oSheets as Object
|
|
' Create a sequence of all sheets within the document
|
|
oSheets = oDocument.Sheets
|
|
|
|
For i = 0 to osheets.Count - 1
|
|
oSheet = osheets.GetbyIndex(i)
|
|
SheetName = oSheet.Name
|
|
MakeLogHeadLine("Sheet No. " & i & "(" & SheetName & ")" )
|
|
|
|
' Check the "body" of the sheet
|
|
GetCellTexts(oSheet)
|
|
|
|
If oSheet.IsScenario then
|
|
MakeLogHeadLine("Scenario Comments from " & SheetName & "'")
|
|
WriteStringtoLogFile(osheet.ScenarioComment)
|
|
End if
|
|
|
|
GetAnnotations(oSheet, "Annotations from '" & SheetName & "'")
|
|
|
|
GetChartStrings(oSheet, "Charts from '" & SheetName & "'")
|
|
|
|
GetControlStrings(oSheet.DrawPage, "Controls from '" & SheetName & "'")
|
|
Next
|
|
|
|
' Pictures
|
|
GetCalcGraphicNames()
|
|
|
|
GetNamedRanges()
|
|
End Sub
|
|
|
|
|
|
Sub GetCellTexts(oSheet as Object)
|
|
Dim BigRange, BigEnum, oCell as Object
|
|
BigRange = oDocument.CreateInstance("com.sun.star.sheet.SheetCellRanges")
|
|
BigRange.InsertbyName("",oSheet)
|
|
BigEnum = BigRange.GetCells.CreateEnumeration
|
|
While BigEnum.hasmoreElements
|
|
oCell = BigEnum.NextElement
|
|
If oCell.String <> "" And Val(oCell.String) = 0then
|
|
WriteStringtoLogFile(oCell.String)
|
|
End If
|
|
Wend
|
|
End Sub
|
|
|
|
|
|
Sub GetAnnotations(oSheet as Object, HeaderLine as String)
|
|
Dim oNotes as Object
|
|
Dim n as Integer
|
|
oNotes = oSheet.getAnnotations
|
|
If oNotes.hasElements() then
|
|
MakeLogHeadLine(HeaderLine)
|
|
For n = 0 to oNotes.Count-1
|
|
WriteStringtoLogFile(oNotes.GetbyIndex(n).String)
|
|
Next
|
|
End if
|
|
End Sub
|
|
|
|
|
|
Sub GetNamedRanges()
|
|
Dim i as integer
|
|
MakeLogHeadLine("Named Ranges")
|
|
For i = 0 To oDocument.NamedRanges.Count - 1
|
|
WriteStringtoLogFile(oDocument.NamedRanges.GetbyIndex(i).Name)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetCalcGraphicNames()
|
|
Dim n,m as integer
|
|
MakeLogHeadLine("Graphics")
|
|
For n = 0 To oDocument.Drawpages.count-1
|
|
For m = 0 To oDocument.Drawpages.GetbyIndex(n).Count - 1
|
|
WriteStringtoLogFile(oDocument.DrawPages.GetbyIndex(n).GetbyIndex(m).Text.String)
|
|
Next m
|
|
Next n
|
|
End Sub
|
|
|
|
|
|
' ***********************************************Writer-Documents**************************************************
|
|
|
|
Sub GetParagraphTexts(oParaObject as Object, HeadLine as String)
|
|
Dim ParaEnum as Object
|
|
Dim oPara as Object
|
|
Dim oTextPortEnum as Object
|
|
Dim oTextPortion as Object
|
|
Dim i as integer
|
|
Dim oCellNames()
|
|
Dim oCell as Object
|
|
|
|
MakeLogHeadLine(HeadLine)
|
|
ParaEnum = oParaObject.Text.CreateEnumeration
|
|
|
|
While ParaEnum.HasMoreElements
|
|
oPara = ParaEnum.NextElement
|
|
|
|
' Note: The Enumeration ParaEnum lists all tables and Paragraphs.
|
|
' Therefor we have to find out what kind of object "oPara" actually is
|
|
If oPara.supportsService("com.sun.star.text.Paragraph") Then
|
|
' "oPara" is a Paragraph
|
|
oTextPortEnum = oPara.createEnumeration
|
|
While oTextPortEnum.hasmoreElements
|
|
oTextPortion = oTextPortEnum.nextElement()
|
|
WriteStringToLogFile(oTextPortion.String)
|
|
Wend
|
|
Else
|
|
' "oPara" is a table
|
|
oCellNames = oPara.CellNames
|
|
For i = 0 To Ubound(oCellNames())
|
|
If oCellNames(i) <> "" Then
|
|
oCell = oPara.getCellByName(oCellNames(i))
|
|
WriteStringToLogFile(oCell.String)
|
|
End If
|
|
Next
|
|
End If
|
|
Wend
|
|
End Sub
|
|
|
|
|
|
|
|
Sub GetChartStrings(oSheet as Object, HeaderLine as String)
|
|
Dim i as Integer
|
|
Dim aChartObject as Object
|
|
Dim aChartDiagram as Object
|
|
|
|
MakeLogHeadLine(HeaderLine)
|
|
|
|
For i = 0 to oSheet.Charts.Count-1
|
|
aChartObject = oSheet.Charts.GetByIndex(i).EmbeddedObject
|
|
If aChartObject.HasSubTitle then
|
|
WriteStringToLogFile(aChartObject.SubTitle.String)
|
|
End If
|
|
|
|
If aChartObject.HasMainTitle then
|
|
WriteStringToLogFile(aChartObject.Title.String)
|
|
End If
|
|
|
|
aChartDiagram = aChartObject.Diagram
|
|
|
|
If aChartDiagram.hasXAxisTitle Then
|
|
WriteStringToLogFile(aChartDiagram.XAxisTitle)
|
|
End If
|
|
|
|
If aChartDiagram.hasYAxisTitle Then
|
|
WriteStringToLogFile(aChartDiagram.YAxisTitle)
|
|
End If
|
|
|
|
If aChartDiagram.hasZAxisTitle Then
|
|
WriteStringToLogFile(aChartDiagram.ZAxisTitle)
|
|
End If
|
|
Next i
|
|
End Sub
|
|
|
|
|
|
|
|
Sub GetFrameTexts()
|
|
Dim i as integer
|
|
Dim oTextFrame as object
|
|
Dim oFrameEnum as Object
|
|
Dim oFramePort as Object
|
|
Dim oFrameTextEnum as Object
|
|
Dim oFrameTextPort as Object
|
|
|
|
MakeLogHeadLine("Text Frames")
|
|
For i = 0 to oDocument.TextFrames.Count-1
|
|
oTextFrame = oDocument.TextFrames.GetbyIndex(i)
|
|
WriteStringToLogFile(oTextFrame.Name)
|
|
|
|
' Is the frame bound to the Page
|
|
If oTextFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE Then
|
|
GetParagraphTexts(oTextFrame, "Text Frame Contents")
|
|
End If
|
|
|
|
oFrameEnum = oTextFrame.CreateEnumeration
|
|
While oFrameEnum.HasMoreElements
|
|
oFramePort = oFrameEnum.NextElement
|
|
If oFramePort.supportsService("com.sun.star.text.Paragraph") then
|
|
oFrameTextEnum = oFramePort.createEnumeration
|
|
While oFrameTextEnum.HasMoreElements
|
|
oFrameTextPort = oFrameTextEnum.NextElement
|
|
If oFrameTextPort.SupportsService("com.sun.star.text.TextFrame") Then
|
|
WriteStringtoLogFile(oFrameTextPort.String)
|
|
End If
|
|
Wend
|
|
Else
|
|
WriteStringtoLogFile(oFramePort.Name)
|
|
End if
|
|
Wend
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetTextFieldStrings()
|
|
Dim aTextField as Object
|
|
Dim i as integer
|
|
Dim CurElement as Object
|
|
MakeLogHeadLine("Text Fields")
|
|
aTextfield = oDocument.getTextfields.CreateEnumeration
|
|
While aTextField.hasmoreElements
|
|
CurElement = aTextField.NextElement
|
|
If CurElement.PropertySetInfo.hasPropertybyName("Content") Then
|
|
WriteStringtoLogFile(CurElement.Content)
|
|
ElseIf CurElement.PropertySetInfo.hasPropertybyName("PlaceHolder") Then
|
|
WriteStringtoLogFile(CurElement.PlaceHolder)
|
|
WriteStringtoLogFile(CurElement.Hint)
|
|
ElseIf Curelement.TextFieldMaster.PropertySetInfo.HasPropertybyName("Content") then
|
|
WriteStringtoLogFile(CurElement.TextFieldMaster.Content)
|
|
End If
|
|
Wend
|
|
End Sub
|
|
|
|
|
|
|
|
Sub GetLinkedFileNames()
|
|
Dim oDocSections as Object
|
|
Dim LinkedFileName as String
|
|
Dim i as Integer
|
|
If Right(oDocument.URL,3) = "sgl" Then
|
|
MakeLogHeadLine("Sub-documents")
|
|
oDocSections = oDocument.TextSections
|
|
For i = 0 to oDocSections.Count - 1
|
|
LinkedFileName = oDocSections.GetbyIndex(i).FileLink.FileURL
|
|
If LinkedFileName <> "" Then
|
|
WriteStringToLogFile(LinkedFileName)
|
|
End If
|
|
Next i
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub GetSectionNames()
|
|
Dim i as integer
|
|
Dim oDocSections as Object
|
|
MakeLogHeadLine("Sections")
|
|
oDocSections = oDocument.TextSections
|
|
For i = 0 to oDocSections.Count-1
|
|
WriteStringtoLogFile(oDocSections.GetbyIndex(i).Name)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetWriterStrings()
|
|
GetParagraphTexts(oDocument, "Document Body")
|
|
GetGraphicNames()
|
|
GetStyles()
|
|
GetControlStrings(oDocument.DrawPage, "Controls")
|
|
GetTextFieldStrings()
|
|
GetSectionNames()
|
|
GetFrameTexts()
|
|
GetHyperLinks
|
|
GetLinkedFileNames()
|
|
End Sub
|
|
|
|
|
|
' ***********************************************Draw-Documents**************************************************
|
|
|
|
Sub GetDrawPageTitles(LocObject as Object)
|
|
Dim n as integer
|
|
Dim oPage as Object
|
|
|
|
For n = 0 to LocObject.Count - 1
|
|
oPage = LocObject.GetbyIndex(n)
|
|
WriteStringtoLogFile(oPage.Name)
|
|
' Is the Page a DrawPage and not a MasterPage?
|
|
If oPage.supportsService("com.sun.star.drawing.DrawPage")then
|
|
' Get the Name of the NotesPage (only relevant for Impress-Documents)
|
|
If oDocument.supportsService("com.sun.star.presentation.PresentationDocument") then
|
|
WriteStringtoLogFile(oPage.NotesPage.Name)
|
|
End If
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetPageStrings(oPages as Object)
|
|
Dim m, n, s as Integer
|
|
Dim oPage, oPageElement, oShape as Object
|
|
For n = 0 to oPages.Count-1
|
|
oPage = oPages.GetbyIndex(n)
|
|
If oPage.HasElements then
|
|
For m = 0 to oPage.Count-1
|
|
oPageElement = oPage.GetByIndex(m)
|
|
If HasUnoInterfaces(oPageElement,"com.sun.star.container.XIndexAccess") Then
|
|
' The Object "oPageElement" a group of Shapes, that can be accessed by their index
|
|
For s = 0 To oPageElement.Count - 1
|
|
WriteStringToLogFile(oPageElement.GetByIndex(s).String)
|
|
Next s
|
|
ElseIf HasUnoInterfaces(oPageElement, "com.sun.star.text.XText") Then
|
|
WriteStringtoLogFile(oPageElement.String)
|
|
End If
|
|
Next
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetDrawStrings()
|
|
Dim oDPages, oMPages as Object
|
|
|
|
oDPages = oDocument.DrawPages
|
|
oMPages = oDocument.Masterpages
|
|
|
|
MakeLogHeadLine("Titles")
|
|
GetDrawPageTitles(oDPages)
|
|
GetDrawPageTitles(oMPages)
|
|
|
|
MakeLogHeadLine("Document Body")
|
|
GetPageStrings(oDPages)
|
|
GetPageStrings(oMPages)
|
|
End Sub
|
|
|
|
|
|
' ***********************************************Misc**************************************************
|
|
|
|
Sub GetDocumentInfo()
|
|
Dim oDocuInfo as Object
|
|
MakeLogHeadLine("Document Properties")
|
|
oDocuInfo = oDocument.DocumentInfo
|
|
WriteStringToLogFile(oDocuInfo.Title)
|
|
WriteStringToLogFile(oDocuInfo.Description)
|
|
WriteStringToLogFile(oDocuInfo.Theme)
|
|
WriteStringToLogFile(oDocuInfo.Author)
|
|
WriteStringToLogFile(oDocuInfo.ReplyTo)
|
|
WriteStringToLogFile(oDocuInfo.Recipient)
|
|
WriteStringToLogFile(oDocuInfo.References)
|
|
WriteStringToLogFile(oDocuInfo.Keywords)
|
|
End Sub
|
|
|
|
|
|
Sub GetHyperlinks()
|
|
Dim i as integer
|
|
Dim oCrsr as Object
|
|
Dim oAllHyperLinks as Object
|
|
Dim SrchAttributes(0) as new com.sun.star.beans.PropertyValue
|
|
Dim oSearchDesc as Object
|
|
|
|
MakeLogHeadLine("Hyperlinks")
|
|
' create a Search-Descriptor
|
|
oSearchDesc = oDocument.CreateSearchDescriptor
|
|
oSearchDesc.Valuesearch = False
|
|
|
|
' define the Search-attributes
|
|
srchattributes(0).Name = "HyperLinkURL"
|
|
srchattributes(0).Value = ""
|
|
oSearchDesc.SetSearchAttributes(SrchAttributes())
|
|
|
|
oAllHyperLinks = oDocument.findAll(oSearchDesc())
|
|
|
|
For i = 0 to oAllHyperLinks.Count - 1
|
|
oFound = oAllHyperLinks(i)
|
|
oCrsr = oFound.Text.createTextCursorByRange(oFound)
|
|
WriteStringToLogFile(oCrs.HyperLinkURL) 'Url
|
|
WriteStringToLogFile(oCrs.HyperLinkTarget) 'Name
|
|
WriteStringToLogFile(oCrs.HyperLinkName) 'Frame
|
|
Next i
|
|
End Sub
|
|
|
|
|
|
Sub GetGraphicNames()
|
|
Dim i as integer
|
|
Dim oDocGraphics as Object
|
|
MakeLogHeadLine("Graphics")
|
|
oDocGraphics = oDocument.GraphicObjects
|
|
For i = 0 to oDocGraphics.count - 1
|
|
WriteStringtoLogFile(oDocGraphics.GetbyIndex(i).Name)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetStyles()
|
|
Dim m,n as integer
|
|
MakeLogHeadLine("User-defined Templates")
|
|
|
|
' Check all StyleFamilies(i.e. PageStyles, ParagraphStyles, CharacterStyles, cellStyles)
|
|
For n = 0 to oDocument.StyleFamilies.Count - 1
|
|
For m = 0 to oDocument.StyleFamilies.getbyIndex(n).Count-1
|
|
If oDocument.StyleFamilies.GetbyIndex(n).getbyIndex(m).IsUserDefined then
|
|
WriteStringtoLogFile(oDocument.StyleFamilies.GetbyIndex(n).getbyIndex(m).Name)
|
|
End If
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetControlStrings(oDPage as Object, HeaderLine as String)
|
|
Dim aForm as Object
|
|
Dim m,n as integer
|
|
MakeLogHeadLine(HeaderLine)
|
|
'SearchFor all possible Controls
|
|
For n = 0 to oDPage.Forms.Count - 1
|
|
aForm = oDPage.Forms(n)
|
|
For m = 0 to aForm.Count-1
|
|
GetControlContent(aForm.GetbyIndex(m))
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Sub GetControlContent(LocControl as Object)
|
|
Dim i as integer
|
|
|
|
If LocControl.PropertySetInfo.HasPropertybyName("Label") then
|
|
WriteStringtoLogFile(LocControl.Label)
|
|
|
|
ElseIf LocControl.SupportsService("com.sun.star.form.component.ListBox") then
|
|
For i = 0 to Ubound(LocControl.StringItemList())
|
|
WriteStringtoLogFile(LocControl.StringItemList(i))
|
|
Next
|
|
End If
|
|
If LocControl.PropertySetInfo.HasPropertybyName("HelpText") then
|
|
WriteStringtoLogFile(LocControl.Helptext)
|
|
End If
|
|
End Sub
|
|
|
|
' ***********************************************LogDocument**************************************************
|
|
|
|
Sub WriteStringtoLogFile( sString as String)
|
|
If (Not FieldInArray(LogArray(),LogIndex,sString))AND (NOT ISNULL(sString)) Then
|
|
LogArray(LogIndex) = sString
|
|
LogIndex = LogIndex + 1
|
|
oLogText.insertString(oLogCursor,sString,False)
|
|
oLogText.insertControlCharacter(oLogCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub MakeLogHeadLine(HeadText as String)
|
|
oLogCursor.CharStyleName = "Log Header"
|
|
oLogText.insertControlCharacter(oLogCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
|
|
oLogText.insertString(oLogCursor,HeadText,False)
|
|
oLogText.insertControlCharacter(oLogCursor,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK,False)
|
|
oLogCursor.CharStyleName = "Log Body"
|
|
End Sub
|
|
</script:module> |