Page 1 of 1

Tablas en Office

Posted: Fri Feb 11, 2011 11:42 am
by antolin
Buenas a todos.

Hace un tiempo hice algunos pinitos creando documentos Office (Word y Excel) desde FiveWin, con TOLEAUTO, todo muy bien, los textos tenían comodines que se sustituían con campos de mis base de datos en tiempo de ejecución. Pero ahora me surge un problemilla, necesito crear, y rellenar tablas con Office (Word). ¿Alguien sabe que comandos hay que utilizar para:

- Crear una tabla
- Insertar/borrar filas en esa tabla
- Escribir/Borrar texto en una celda
- Cambiar el color de una fila/Celda
- Cambiar las propiedades de una fila/Celda

Una punctualización, entonces trabajaba con Ofiice 2003. ¿Se trabaja igual con el 2007?

Gracias de antemano.

Re: Tablas en Office

Posted: Sat Feb 12, 2011 5:36 am
by anserkk
This program reads the Customer.DBF available in \FWH\Samples folder and dumps the data onto a table on a word document

Code: Select all

Include "FiveWin.ch"

#DEFINE wdAlignParagraphLeft    0
#DEFINE wdAlignParagraphCentre  1
#DEFINE wdAlignParagraphRight   2

#DEFINE wdStory                 6
#DEFINE wdCollapseEnd           0

#DEFINE wdBorderTop            -1
#DEFINE wdLineStyleDouble       7

#DEFINE CR                     CHR(13)

//--------------------------//
Function Main()

Local oWord,oRange,oTable,nRecCount,nRow,nTotSalary:=0

USE \FWH\Samples\CUSTOMER
nRecCount:=RecCount()

oWord:=CREATEOBJECT("Word.Application")
oWord:Documents:Add()

oRange:=oWord:ActiveDocument:Range()

// Move to the end of the document, leave 2 empty lines
oRange:MoveEnd( wdStory ) 
oRange:Collapse( wdCollapseEnd )
oRange:InsertAfter( CR + CR )
oRange:Collapse( wdCollapseEnd )

// Add a table with 2 rows and 3 columns
oTable:=oWord:ActiveDocument:Tables:Add(oRange,2,3)

WITH OBJECT oTable
   // Set up borders and shading
   // If u dont want borders then set the below lines 2 lines to .F.
   :Borders:InsideLineStyle:=.T.
   :Borders:OutsideLineStyle:=.T.

   // Shade first row for headings
   :Rows[1]:Shading:Texture = 100


   // Put heading text in and set alignment
   :Cell(1,1):Range:ParagraphFormat:Alignment:=wdAlignParagraphLeft
   :Cell(1,1):Range:InsertAfter("Last Name")   
   
   
   :Cell(1,2):Range:ParagraphFormat:Alignment:=wdAlignParagraphRight
   :Cell(1,2):Range:InsertAfter("Salary")

   :Cell(1,3):Range:ParagraphFormat:Alignment:=wdAlignParagraphLeft
   :Cell(1,3):Range:InsertAfter("Hire Date")

   // Format data cells
   :Cell(2,1):Range:ParagraphFormat:Alignment:=wdAlignParagraphLeft
   :Cell(2,2):Range:ParagraphFormat:Alignment:=wdAlignParagraphRight
   :Cell(2,3):Range:ParagraphFormat:Alignment:=wdAlignParagraphLeft

   // Add data and format
   nTotSalary:=0   
   For nRow:=1 to 20 // nRecCount

       WITH OBJECT :Rows[nRow + 1]     
           :Cells[1]:Range:InsertAfter( Customer->LAST  )
           :Cells[2]:Range:InsertAfter( Customer->SALARY  )       
           :Cells[3]:Range:InsertAfter( Customer->HIREDATE  )

       END
       
       // Add a new Row
       :Rows:Add()
       
       // Calculating total
       nTotSalary+=Customer->SALARY

       Skip

   Next
   
   // Total row shade and place total 
   :Rows[ nRow + 1 ]:Shading:Texture = 100
   WITH OBJECT :Rows[ nRow + 1 ]
       :Cells[1]:Range:InsertAfter("Total Salary")
       :Cells[2]:Range:InsertAfter(nTotSalary)
   
   END
   
   // Size columns, for simplicity, let word do the work
   :Columns:Autofit()
END
oWord:ActiveDocument:SaveAs("D:\Anser")
oWord:ActiveDocument:Close()
oWord:Quit()
MsgInfo("Finished")
Return
Screen Snapshot
Image

Regards
Anser

Re: Tablas en Office

Posted: Mon Feb 14, 2011 6:56 am
by antolin
Muchas gracias anserkk, es exactamente lo que estaba buscando. Una maravilla.

Re: Tablas en Office

Posted: Mon Feb 14, 2011 7:52 am
by antolin
Sólo una cosa más, si no es mucha molestia.

Mi intención, es modificar/completar una archivo modelo, entonces:

1- Cómo añado texto al final de, por ejemplo, la 3ª línea.
2- Cómo selecciono una tabla ya existente para modificarlla.

Gracias

Re: Tablas en Office

Posted: Mon Feb 14, 2011 10:01 am
by anserkk
antolin wrote:Sólo una cosa más, si no es mucha molestia.

Mi intención, es modificar/completar una archivo modelo, entonces:

1- Cómo añado texto al final de, por ejemplo, la 3ª línea.
2- Cómo selecciono una tabla ya existente para modificarlla.

Gracias
The following code will read data from an existing table available in a word file and will modify the contents of the table. You may first create the word file using my sample code posted above.

Code: Select all

#Include "FiveWin.ch"

//--------------------------//
Function Main()

Local oWord,oDoc,oTable,nRow,nCol,nColor

oWord:=CREATEOBJECT("Word.Application")
oDoc = oWord:Documents:Open("D:\Anser.docx")

oTable = oDoc:Tables:Item(1) // 1 means, First table on the document

WITH OBJECT oTable
    nColor:=1
    For nRow = 2 To oTable:Rows:Count
        For nCol = 1 To oTable:Columns:Count
        
            // Changing the text color of the cell
            :Cell(nRow, nCol):Range:Font:ColorIndex = nColor
            
            // Write to the table cell
            :Cell(nRow, nCol):Range:Text = "Replaced with " + Str(nRow - 1)
            
            // If you want to read the contents then
            // MsgInfo( :Cell(nRow, nCol):Range:Text )
            
            iif(nColor == 16,nColor:=1,nColor++)
        Next
    Next 
    
    // Size columns, for simplicity, let word do the work
    :Columns:Autofit()
END

oWord:Visible := .T.
Return
Screen Snapshot
Image


Regards
Anser

Re: Tablas en Office

Posted: Tue Feb 15, 2011 11:42 am
by antolin
Muchas Gracias Anser, con esto me sobra para empezar.

Saludos

Re: Tablas en Office

Posted: Thu Mar 10, 2011 7:20 pm
by fergonm
Buenas tardes.

Intento enlazar el ejemplo de ANSERKK pero tengo el siguiente error "Unresolved external HB_FUN_CREATEOBJECT"

Creo que se trata de una libería de Hb que me falta. Enlazo con HbOLE y OLE2.

Un saludo

Re: Tablas en Office

Posted: Fri Mar 11, 2011 2:47 am
by Daniel Garcia-Gil
Saludos

que version de [x]Harbour usas?

Re: Tablas en Office

Posted: Fri Mar 11, 2011 8:16 am
by fergonm
Buenos días Daniel.

La versión que utilizo creo que es la 1.4, que es la que descargué de Five Tech al adquirir FWH 7.07

Un saludo. Fernando