1

Тема: OOo & Automation: вывод списка доступных классов

Скрипт выводит список доступных классов (uno services) Open Office в текстовый файл ooounolist.txt в текущем каталоге:

JScript

// Вывод списка доступных классов (uno services) OOo
// JScript, Open Office 2.x, WinMe/XP

// - Запуск сервера -
//-----------------------------------------------------------
 var objShell = WScript.CreateObject("WScript.Shell");
 objShell.Run('soffice -nodefault -nologo -accept=socket,host=127.0.0.1,port=8100;urp;StarOffice.ServiceManager');
 WScript.Sleep(10000);

// - Клиент - 
//-----------------------------------------------------------
 var objServiceManager = WScript.CreateObject("com.sun.star.ServiceManager");
 var oURLResolver = objServiceManager.createInstance("com.sun.star.bridge.UnoUrlResolver");
 var sHost = "127.0.0.1";
 var sPort = "8100";
 var sURL = "uno:socket,host="+sHost+",port="+sPort+";urp;StarOffice.ServiceManager";
 var oRemote = oURLResolver.resolve(sURL);

 var aSvc = new VBArray(oRemote.AvailableServiceNames).toArray().sort();
 var l = aSvc.length;
 WScript.Sleep(100);
 objShell.PopUp("Всего классов: "+l,2,"OOo Class List",48);


// Вывод списка классов в текстовый файл
//-----------------------------------------------------------
 var oFileAccess = objServiceManager.createInstance("com.sun.star.ucb.SimpleFileAccess");
 var oStream = oFileAccess.openFileWrite(objShell.CurrentDirectory+"\\ooounolist.txt");
 oStream.truncate();

 var oTextStream = objServiceManager.createInstance("com.sun.star.io.TextOutputStream");
 oTextStream.setOutputStream(oStream);

 var dlm = String("----------------------------------------------\r\n");

 oTextStream.writeString(dlm);
 for (i=0;i<l;i++)
 {oTextStream.writeString(aSvc[i]+"\r\n")}
 oTextStream.writeString(dlm);

 oTextStream.closeOutput();
 objShell.PopUp("Готово.", 2, "OOo Class List", 48); 
 
 oTextStream = null;
 oStream = null;
 oFileAccess = null;
 oURLResolver = null;
 objServiceManager = null;
 CollectGarbage();
 WScript.Quit();
//-----------------------------------------------------------
//pltrgst

Использована возможность работы soffice в качестве сервера. Подробнее см. http://www.pitonyak.org/AndrewMacro.odt: "5.34. Connect to a remote OOo server using Basic"


Список свойств и методов, а также доступных интерфейсов uno-класса можно получить используя стандартный макрос writedbginfo, поставляемый в библиотеке [Макросы и диалоги Open Office org].Tools:

OOo Basic

GlobalScope.BasicLibraries.LoadLibrary("Tools")    
Set objU = CreateUnoService("com.sun.star.awt.UnoControlDialog")
writedbginfo(objU)

Либо использовать, например, вот такой макрос, который выводит список методов, свойств, а также доступных интерфейсов запрошенного класса в текстовый файл с именем класса, расположенный в заданном каталоге, после чего открывает этот файл в "Блокноте":

OOo Basic

'--------------------------------------------------------------------
' Вывод свойств и методов объекта Uno Service в текстовый файл
' OOo Basic, OOo 2.x, WinMe/XP
'--------------------------------------------------------------------
Private sDlm$
Private oText As Object

'[Создание Uno Service объекта по его ProgId. Вывод списка свойств,]
'[методов и поддерживаемых интерфейсов]
'---------------------------------------------------------------------
Sub ViewUnoClass()

    '=================================================================
    Const sDir$ = "C:\UnoMethods"    'Каталог вывода списка
    '=================================================================
        
    sProg$ = Trim(InputBox("ProgId UnoService:","Список свойств и методов"))
    If Len(sProg$) = 0 Then Exit Sub
    Set oObjUno = CreateUnoService(sProg$)

    '/Формирование пути к файлу вывода/
    '----------------------------------------------------------------
    Set oFile = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
    If Not oFile.isFolder(sDir$) Then oFile.CreateFolder(sDir$)
    sPath$ = sDir$ & "\" & sProg$ & ".txt"
    '----------------------------------------------------------------

On Local Error Goto NOPROPERTYSETINFO:
    '//--------------------------------------------------------------//    
    ' Если объект не является действительным, то ошибка 
    ' возникает при определении его методов и свойств

    sMethods$ = oObjUno.dbg_Methods
    sProperties$ = oObjUno.dbg_Properties
    sInterfaces$ = oObjUno.dbg_SupportedInterfaces
    
    '/Заполнение файла/
    '------------------------------------------------------------------    
    sDlm$ = String(64, "=") & Chr(13) & Chr(10)

    Set oStream = oFile.openFileWrite(sPath$)
    oStream.truncate()
    
    Set oText = CreateUnoService("com.sun.star.io.TextOutputStream")
    oText.setOutputStream(oStream)
        WriteInfo(sMethods$)
        WriteInfo(sProperties$)
        WriteInfo(sInterfaces$)
    oText.closeOutput()
    MsgBox "Готово",64,"Список свойств и методов"        
    Shell ("notepad.exe", 3, sPath$, False)
    '----------------------------------------------------------------
    Set oText = Nothing
    Set oStream = Nothing
    Set oFile = Nothing
    Set oObjUno = Nothing
    Exit Sub
    '----------------------------------------------------------------
NOPROPERTYSETINFO:
    MsgBox error$,16,"Error"
    Resume LEAVEPROC:
LEAVEPROC:
End Sub

'[Запись в файл]
'--------------------------------------------------------------------
Sub WriteInfo(sList$)
        oText.writeString(sDlm$)
        aList = Split(sList$,Chr(10))
        For i%=0 To Ubound(aList)-1
                s = Split(aList(i%),";")
                For j%=0 To Ubound(s)
                oText.writeString(s(j%) &  Chr(13) & Chr(10))
                Next
        Next
        oText.writeString(sDlm$)
End Sub
'--------------------------------------------------------------------
'pltrgst

Осталось вписать этот макрос в библиотеку и назначить ему постоянный пункт меню в области StarDesktop.