Como comente anteriormente el AutomateIt parece que no funciona...
He empezado a desarrollar un layer (o capa) para que escribiendo codigo OLE
Excel se traduzca a OLE Calc... no se como terminara la empresa... ahi va lo
que llevo desarrollado (el lenguaje es xHarbour)
#Define lSISTEMA_CALC .T.
//--------------------------------------------------------------------------
//
FUNCTION CreateObjectExcelLayer()
Local oExcel:= NIL
Local oErr:= NIL
IF !lSISTEMA_CALC
TRY
// Siempre crea objeto (evito algunos problemas pe. en saveas())
oExcel:= CreateObject( "Excel.Application" )
CATCH oErr
MERROR_( " No se pudo conectar con Excel !", OLE2TXTERROR(),
oExcel,;
oErr:SubSystem(),;
oErr:Description,;
oErr:Operation )
oExcel:= NIL
END
ELSE
oExcel:= TExcelLayer():New()
ENDIF
RETURN oExcel
*
//--------------------------------------------------------------------------
//
CLASS TExcelLayer
METHOD New()
// ASSIGN Visible(x) INLINE (msginfo("hola", x))
METHOD Get(cMessage) //INLINE msginfo(cMessage, "falta implementar !")
// Datas Excel simuladas ----------------------------------------
// Estas datas seran las que se manjen desde fuera... pero aqui
// dentro deben tener valores apropiados
DATA oSheet
DATA WorkBooks
DATA TmpWorkSheets HIDDEN
METHOD WorkSheets(nSheet)
#Define ACTIVE_SHEET ::oOOCalc:getCurrentController():getActiveSheet()
ACCESS ActiveSheet INLINE TWorkSheetExcelLayer():New(Self, NIL, NIL,
ACTIVE_SHEET)
//---------------------------------------------------------------
// Datas Calc reales --------------------------------------------
DATA oOOEngine READONLY
DATA oOOCore READONLY
DATA oOODesktop READONLY
DATA oOOCalc READONLY
//---------------------------------------------------------------
ENDCLASS
*
//--------------------------------------------------------------------------
//
METHOD WorkSheets(nSheet)
Local xRet:= NIL
#Define lCOMO_DATA PCount() == 0
IF lCOMO_DATA
xRet:= ::TmpWorkSheets
ELSE
xRet:= TWorkSheetExcelLayer():New(Self, NIL, nSheet- 1)
ENDIF
RETURN xRet
//--------------------------------------------------------------------------
//
METHOD Get(cMessage)
cMessage:= Upper(cMessage)
DO CASE
CASE cMessage == "ACTIVESHEET"
xRet:= ::ActiveSheet
*
CASE .T.
MERROR_("Falta implementar mensaje", cMessage)
ENDCASE
RETURN xRet
*
//--------------------------------------------------------------------------
//
METHOD New() CLASS TExcelLayer
Local oErr
*
TRY
::oOOEngine:= CreateObject( "com.sun.star.ServiceManager" )
CATCH oErr
MERROR_( " No se pudo conectar con Open Office !", OLE2TXTERROR(),
::oOOEngine,;
oErr:SubSystem(),;
oErr:Description,;
oErr:Operation )
RETURN NIL
END
::oOOcore :=
::oOOEngine:CreateInstance("com.sun.star.refelection.CoreReflection")
::oOODesktop := ::oOOEngine:createInstance("com.sun.star.frame.Desktop")
*
::oOOCalc := ::oOODesktop:loadComponentFromURL("private:factory/scalc",
"_blank", 0, {})
::WorkBooks := TWorkBooksExcelLayer():New(Self)
::TmpWorkSheets:= TWorkSheetsExcelLayer():New(Self)
RETURN Self
*
*
*
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
//
CLASS TWorkBooksExcelLayer
EXPORTED:
METHOD New()
METHOD Add()
HIDDEN:
DATA oExcelLayer
ENDCLASS
//--------------------------------------------------------------------------
//
METHOD New(oExcelLayer) CLASS TWorkBooksExcelLayer
::oExcelLayer:= oExcelLayer
RETURN Self
//--------------------------------------------------------------------------
//
METHOD Add() CLASS TWorkBooksExcelLayer
Local oBook
oBook:= TWorkBookExcelLayer():New(::oExcelLayer) //, Self)
RETURN oBook
//--------------------------------------------------------------------------
//
CLASS TWorkBookExcelLayer
EXPORTED:
METHOD New()
HIDDEN:
DATA oExcelLayer
DATA oWorkBooksExcelLayer
ENDCLASS
//--------------------------------------------------------------------------
//
METHOD New(oExcelLayer, oWorkBooksExcelLayer) CLASS TWorkBookExcelLayer
::oExcelLayer := oExcelLayer
::oWorkBooksExcelLayer:= oWorkBooksExcelLayer
RETURN Self
//--------------------------------------------------------------------------
//
CLASS TWorkSheetsExcelLayer
EXPORTED:
METHOD New()
// // -1 pq parece que indica una hoja mas de la cuenta !!!
// ACCESS Count INLINE Len( ::oExcelLayer:oOOCalc:getSheets() )- 1
ACCESS Count INLINE ::oExcelLayer:oOOCalc:getSheets():getCount()
HIDDEN:
DATA oExcelLayer
ENDCLASS
//--------------------------------------------------------------------------
//
METHOD New(oExcelLayer) CLASS TWorkSheetsExcelLayer
::oExcelLayer:= oExcelLayer
RETURN Self
*
//--------------------------------------------------------------------------
//
CLASS TWorkSheetExcelLayer
EXPORTED:
METHOD New()
METHOD Delete() INLINE
::oExcelLayer:oOOCalc:getSheets():removeByName(::oOOSheet:Name )
ACCESS Name INLINE ::oOOSheet:Name
ASSIGN Name(cName) INLINE ::oOOSheet:Name:= cName
HIDDEN:
DATA oExcelLayer
DATA oWorkSheetsExcelLayer
DATA nSheet
DATA oOOSheet
ENDCLASS
//--------------------------------------------------------------------------
//
METHOD New(oExcelLayer, oWorkSheetsExcelLayer, nSheet, oOOSheet) CLASS
TWorkSheetExcelLayer
::oExcelLayer := oExcelLayer
::oWorkSheetsExcelLayer:= oWorkSheetsExcelLayer
::nSheet := nSheet
DO CASE
CASE ::nSheet != NIL
::oOOSheet:= ::oExcelLayer:oOOCalc:getSheets():getByIndex(nSheet)
CASE oOOSheet != NIL
::oOOSheet:= oOOSheet
ENDCASE
RETURN Self
Saludos
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]