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]

Responder a