Page 1 of 1

Horas y no se deja...

Posted: Mon Apr 10, 2006 2:11 am
by fleal
Como último recurso acudo a ustedes... llevo horas con esto y simplemente no me sale.

Intento copiar una hoja del libro de excel al final del libro.
Tengo un libro con 3 hojas

Primero selecciono la hoja que voy a copiar
oExcel:ActiveWorkbook:Sheets("Hoja1"):Select()

Ahora intento copiarla al final
oExcel:ActiveWorkbook:Sheets("Hoja1"):Copy("After")

Según VB se hace asi, pero no tengo idea de como implementar lo último
Sheets("Hoja1").Copy After:=Sheets(3)

¿Alguna alma caritativa que pueda ayudarme?
Fivewin 2.7 + Harbour

Gracias
Fernando Leal

y otras horas más tarde

Posted: Mon Apr 10, 2006 6:26 am
by fleal
Si a alguien le sirve lo he resuelto asi:

Activar la hoja que necesito, en este caso se llama "A"
oExcel:ActiveWorkbook:Sheets("A"):Select()

Agrego las hojas que necesito en el libro
RESUVD->( dbgotop() )
FOR i := 1 TO RESUVD->( lastrec() -1 )
oExcel:ActiveWorkbook:Sheets("A"):Invoke("Copy",oHoja)
NEXT

Ahora las renombro como yo quiero
nRows := RESUVD->( lastrec() )

while RESUVD->( !eof() )
if nRows == 1
oExcel:ActiveWorkbook:Sheets("A"):Select()
oExcel:ActiveWorkbook:Sheets("A"):Name := alltrim( RESUVD->FOLIBNX )

else
oExcel:ActiveWorkbook:Sheets("A ("+alltrim( cValToChar( nRows ) )+")"):Select()
oExcel:ActiveWorkbook:Sheets("A ("+alltrim( cValToChar( nRows ) )+")"):Name := alltrim( RESUVD->FOLIBNX )

endif

Activo la hoja para meterle los datos
oHoja := oExcel:Get( "ActiveSheet" )
if VD->( dbseek( RESUVD->FOLSICRE ) )
Le meto los datos que necesito...
oHoja:Cells( 8, 6 ):Value := VD->CNOMVISITA
oHoja:Cells( 8, 25 ):Value := VD->FOLIBNX


Ingo a su male el problema... vamonos con lo que sigue que es para hoy.

Posted: Mon Apr 10, 2006 9:58 am
by Antonio Linares
Fernando,

gracias por compartirlo con todos :)

Posted: Mon Apr 10, 2006 12:49 pm
by Vikthor
Mi estimado Fer :

Te puedes ahorrar muchos tiempo si revisas el código fuente de la clase TExcel :

Code: Select all

  /*
   * Metodos para las propiedades de la hoja
   */
  METHOD AddSheet()         INLINE ::oExcel:Sheets:Add()
  METHOD CopySheet()        INLINE ::oExcel:Sheets:Copy()
  METHOD DelSheet(cSheet)   INLINE ::oExcel:Sheets(cSheet):Delete()

  // cPos -> "After" | "Before"
  METHOD MoveSheet(cSheet,cPos,nSheet)  INLINE ::oExcel:Sheets(cSheet):Move(cPos,nSheet)
*   oSheet := oExcel:Sheets(“oSheet1”)                              //move sheet position. This example will move
*   oExcel:Sheets( "oSheet2” ):Move( oSheet )

  METHOD SetSheet(cSheet)               INLINE ::oExcel:Sheets(cSheet):Select() , ::oSheet := ::oExcel:Get( "ActiveSheet" )
  METHOD NameSheet(cSheet,cName)        INLINE ::oExcel:Sheets(cSheet):Name := cName