Currently open documents
From Apache OpenOffice Wiki
The following function returns an array of the currently open documents. It calls fnWhichComponent which is available from Currently active document.
function fnCurrentDocuments(optional sType as string) dim oEnum as object, oPosDoc as object, i as integer dim oListboxDocs as object oEnum = StarDesktop.getComponents.createEnumeration 'Count windows i = -1 while oEnum.hasMoreElements oPosDoc = oEnum.nextElement ' The check for interface XserviceInfo necessary as some windows, e.g. Help ' don't have the interface and need to be excluded anyway. If HasUnoInterfaces(oPosDoc, "com.sun.star.lang.XServiceInfo") Then if isMissing(sType) then i = i + 1 elseif fnWhichComponent(oPosDoc) = Stype then i = i + 1 end if end if wend if i = -1 then 'no documents of specified type currently open exit function end if dim mDocs(i) i = -1 oEnum = StarDesktop.getComponents.createEnumeration while oEnum.hasMoreElements oPosDoc = oEnum.nextElement If HasUnoInterfaces( oPosDoc, "com.sun.star.lang.XServiceInfo") Then If isMissing(sType) then i = i + 1 mDocs(i) = oPosDoc elseif fnWhichComponent(oPosDoc) = Stype then i = i + 1 mDocs(i) = oPosDoc end if end if wend fnCurrentDocuments = mDocs() end function
An example of calling the above function. This function returns an array of the titles for the currently open documents.
function fnCurrentDocTitles(optional sType as string) if isMissing(sType) then mDocs = fnCurrentDocuments() else mDocs = fnCurrentDocuments(SType) end if if isEmpty(mDocs) then exit function end if nDocs = uBound(mDocs) dim mTitles(nDocs) for i = 0 to nDocs mTitles(i) = mDocs(i).getCurrentController.getFrame.getPropertyValue("Title") next fnCurrentDocTitles = mTitles() End function
An example of displaying the titles of the currently open documents:
sText = "Text" mCurTitles = fnCurrentDocTitles(sText) if not isEmpty(mCurTitles) then msgbox join(mCurTitles, chr(10)), 0, "Currently open " & sText & "documents." else msgbox "No Text documents currently open." end if