Please NageswaraRao, G. try:
Must openoffice be instaled; open a new document and go to exit, even if you exit openoffice:writer or not. After try to uncomment ::=nil in method finaliza().
main.prg
#include "FiveWin.ch"
static oWnd
//----------------------------------------------------------------------------//
function Main()
DEFINE WINDOW oWnd FROM 1, 1 TO 22, 75 ;
TITLE "Ejemplos de OpenOffice" ;
MENU BuildMenu()
SET MESSAGE OF oWnd ;
TO FWVERSION + " " + FWCOPYRIGHT ;
CENTERED DATE CLOCK KEYBOARD 2007
ACTIVATE WINDOW oWnd MAXIMIZED // Now the app will start maximized
return nil
//----------------------------------------------------------------------------//
function BuildMenu()
local oMenu
MENU oMenu 2007
MENUITEM "Writer"
MENU
MENUITEM "Abrir un archivo en &blanco..." ;
ACTION Writer00() ;
MESSAGE "Solamente abre un fichero en blanco"
MENUITEM "Abrir un archivo un archivo determinado..." ;
ACTION Writer01() ;
MESSAGE "Solamente abre un fichero"
ENDMENU
MENUITEM "&Exit"
MENU
MENUITEM "&Calculator..." ;
ACTION WinExec( "Calc" ) ;
MESSAGE "Using the Windows calculator"
SEPARATOR
MENUITEM "&End..." ;
ACTION If( MsgYesNo( "Quieres salir ?", "Porfavor, selecciona" ),;
(TOpenOffice():Finaliza(), oWnd:End()),) ;
MESSAGE "Salir de la aplicaciĂłn"
ENDMENU
ENDMENU
return oMenu
/*-----------------------------------------------------------------------------------------------*/
FUNCTION Writer00()
LOCAL oDoc
/* Para abrir un documento en blanco basta que no mandemos nada a la clase tOpenOffic:Writter */
MsgRun( "Instanciando OpenOffice",;
"Un momento por favor..." ,;
{ || oDoc := TOpenOffice():Writer( , .T. ) } )
RETURN NIL
FUNCTION Writer01()
LOCAL cFile, oDoc
cFile := cGetFile32( "*.*", "Buscar Archivos" )
IF cFile = NIL; RETURN NIL; ENDIF
//cFilePath( GetModuleFileName( GetInstance() ) ) + "Macros.odt"
MsgRun( "Instanciando OpenOffice",;
"Un momento por favor..." ,;
{ || oDoc := TOpenOffice():Writer( cFile , .T. ) } ) //cFile
RETURN NIL
And the class tha I'm creating:
#include "Fivewin.ch"
#DEFINE CR CHR(13)
#DEFINE wdTAB CHR(9)
** API CONTROL CHARACTERS FOR insertControlCharacter
#define PARAGRAPH_BREAK 0
#define LINE_BREAK 1
#DEFINE HARD_HYPHEN 2
#DEFINE SOFT_HYPHEN 3
#DEFINE HARD_SPACE 4
#DEFINE APPEND_PARAGRAPH 5
#DEFINE STANDARD_FORMAT ".odt"
/*-----------------------------------------------------------------------------------------------*/
CLASS TOpenOffice
CLASSDATA oService // Objeto Servicio
CLASSDATA oDesktop // Objeto Escritorio
CLASSDATA oDisp // Objeto Disp
DATA oDoc // Objeto Documento
* DATA oTxt // Objeto Texto
DATA oRng // Objeto Rango
DATA oCursor // Objeto Cursor
DATA oSourceframe // Objeto SourceFrame
DATA lOpen Init .T. // Boleano para saber si esta abierto un objeto
METHOD Writer(cFile)
METHOD Close() INLINE ::oDoc:Close( .T. )
METHOD Copy() INLINE ::Dispatch( "Copy" )
METHOD ConvertToURL( cFile )
METHOD Dispatch( cMethod, aArgs )
METHOD GetPropertyValue( cName, cValue )
METHOD New() Constructor
METHOD Print() INLINE ::Dispatch( "Print" )
METHOD PrintDefault() INLINE ::Dispatch( "PrintDefault" )
METHOD Visible( lVisible )
METHOD Paste() INLINE ::Dispatch( "Paste" )
METHOD Preview() INLINE ::Dispatch( "PrintPreview" )
METHOD Finaliza()
ERROR HANDLER ERROR( xVal )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD Visible( lVisible )
IF lVisible == NIL
RETURN ::oDoc:getCurrentController():GetFrame():getComponentWindow():IsVisible()
ELSE
::oDoc:getCurrentController():GetFrame():getComponentWindow():setVisible( lVisible )
ENDIF
RETURN NIL
/*-----------------------------------------------------------------------------------------------*/
METHOD Writer( cFile, lVisible ) CLASS TOpenOffice
LOCAL cUrl, oDoc, oTxt, aArg := {}
::New()
IF !::lOpen; RETURN NIL; ENDIF
DEFAULT lVisible := .T.
IF cFile == NIL
cUrl := "private:factory/swriter"
ELSE
cUrl := "file:///" + cFile
ENDIF
IF !lVisible
AAdd( aArg, ::GetPropertyValue( "Hidden", .T. ) ) //Le asigna la propiedad de que este escondido
//(Ojo no puedes volverlo a mostrar) para
//ejecutarse mas rapido. Ejemplo: realizar una
ENDIF //impresion de un documento sin que lo puedan modificar
oDoc := ::oDesktop:LoadComponentFromUrl( cUrl, "_blank", 0, aArg )
RETURN oDoc //oSheet
/*-----------------------------------------------------------------------------------------------*/
METHOD Dispatch( cMethod, aArgs ) CLASS TOpenOffice
DEFAULT aArgs := {}
IF ValType( aArgs ) == "O"; aArgs := { aArgs }; ENDIF
::oDisp:ExecuteDispatch( ::oDoc:GetCurrentController():GetFrame(), ".uno:" + cMethod, "", 0, aArgs )
RETURN NIL
/*-----------------------------------------------------------------------------------------------*/
METHOD GetPropertyValue( cName, xValue ) CLASS TOpenOffice
LOCAL oArg
oArg := ::oService:Bridge_GetStruct( "com.sun.star.beans.PropertyValue" )
oArg:Name := cName
oArg:Value := xValue
RETURN oArg
/*-----------------------------------------------------------------------------------------------*/
METHOD New() CLASS TOpenOffice
// Par usar cualquier aplicativo de OpenOffice lo primero que se tiene que hacer es cargar el ServiceManager
// una vez se tiene capturado se debe instanciar el objeto Destop y finlamente el Despachador
IF ::oDesktop != NIL; RETURN SELF; ENDIF
IF ::oService != NIL; RETURN SELF; ENDIF
::lOpen := .T.
TRY
::oService := TOleAuto():New( "com.sun.star.ServiceManager" )
CATCH
MsgStop( "No se puede iniciar el servicio manager" )
::lOpen := .F.
END
IF ::lOpen
::oDesktop := ::oService:CreateInstance( "com.sun.star.frame.Desktop" )
::oDisp := ::oService:CreateInstance( "com.sun.star.frame.DispatchHelper" )
ENDIF
RETURN SELF
/*-----------------------------------------------------------------------------------------------*/
METHOD ERROR( xVal ) CLASS TOpenOffice
MsgInfo( __GetMessage() + " Inexistente" )
RETURN NIL
/*-----------------------------------------------------------------------------------------------*/
METHOD ConvertToURL( cFile ) CLASS TOpenOffice
LOCAL nFor, nLen := Len( cFile )
FOR nFor := 1 TO nLen
IF cFile[ nFor ] == "\"
cFile[ nFor ] := "/"
ENDIF
NEXT
RETURN cFile
/*-----------------------------------------------------------------------------------------------*/
METHOD Finaliza() CLASS TOpenOffice
::oDesktop:=nil
::oDoc:=nil
::oDisp:=nil
*::oService:=nil //Try to uncomment (created with toleauto)
Return nil