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
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
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