Desde PowerBuilder Podemos trabajar con documentos de office de dos maneras. Con interacción directa del usuario o sin ella.
Para tener interacción directa del usuario con el documento de office utilizamos un control ole sobre una ventana donde se puede vincular o incrustar un documento.Para trabajar un documento de office sin tener interacción directa del usuario podemos utilizar OLE o DDE
COMO FUNCIONA
OLE y DDE le permiten realizar acciones similares. Ambos permiten enviar comandos a otra aplicación, realizar acciones en dicha aplicación, y devolver los datos a su aplicación PowerBuilder. Hay, sin embargo, algunas diferencias fundamentales entre OLE y DDE. En las operaciones de OLE, el control del programa está realmente transferido temporalmente al otro programa (ej: Microsoft Excel con el propósito de manipular los datos de la hoja). Con DDE, las operaciones se producen cuando PowerBuilder envía una orden a Microsoft Excel para iniciar la comunicación entre las dos aplicaciones. PowerBuilder, sin embargo, siempre tiene el control del programa.
Otra diferencia, que es una ventaja de OLE, OLE es el que inicia automáticamente la aplicación de objetos cuando el control del programa se transfiere a la aplicación de objeto. Cuando utiliza DDE, usted debe comprobar que la aplicación que va a utilizar (el servidor DDE) se ha iniciado, y ponerlo en marcha si es necesario.
Además, con los datos de OLE siempre se muestra en una ventana dependiente o independiente tal y como aparece en la aplicación que creó el objeto. Por ejemplo, si la solicitud es objeto de Microsoft Excel, una ventana de objeto dependiente o independiente muestra los datos de la hoja de trabajo de la aplicación PowerBuilder (la aplicación contenedora) tal como aparece en el propio Microsoft Excel. DDE no le permiten ver la hoja de trabajo que aparece en la solicitud.
DDE (Dynamic Data Exchange )
Para utilizar DDE, el proceso requiere que por lo menos dos aplicaciones de estar involucrado. La aplicación que solicita datos o envía comandos ejecutables se llama el cliente, mientras que la aplicación que se ejecuta el comando solicitado o devuelve los datos solicitados se llama el servidor. Dependiendo de cómo se implementa el DDE, una aplicación puede ser capaz de actuar tanto como el cliente y un servidor. PowerBuilder ha sido desarrollado para apoyar DDE para ambos
Ejemplo
long handle
string s_regiondata[3]
handle = OpenChannel("Excel", "REGION.XLS",Handle(w_ddewin))
GetRemote("R1C2", s_regiondata[1], handle, Handle(w_ddewin))
GetRemote("R1C3", s_regiondata[2], handle, Handle(w_ddewin))
GetRemote("R1C4", s_regiondata[3], handle, Handle(w_ddewin))
CloseChannel(handle, Handle(w_ddewin))
AUTOMATIZACIONES CON OLE
myoleobject = CREATE oleobject
rc = myoleobject.ConnectToNewObject ( "Excel.Application" )
Como Abrir Documentos de Office
Aplicacion | Objeto Ole | Abreviado |
Excel | Microsoft.Office.Interop.Excel | Excel.Application |
Word | Microsoft.Office.Interop.Word | Word.Application |
PowerPoint | Microsoft.Office.Interop.PowerPoint | PowerPoint.Application |
Outlook | Microsoft.Office.Interop.Outlook | Outlook.Application |
Infopath | Microsoft.Office.Infopath | |
Visio | Microsoft.Office.Interop.Visio | |
Project | Microsoft.Office.Interop.MSProject | |
Access | Microsoft.Office.Interop.Access | Access.Application |
EJEMPLO
oleobject myoleobject
integer rc, i, count, j, colcount
string mydata, colname, colnames
myoleobject = CREATE oleobject
rc = myoleobject.ConnectToNewObject ( "Excel.Application" )
IF rc <> 0 THEN
MessageBox ( "Error", String ( rc ) )
Return
END IF
try
myoleobject.Application.Visible = TRUE // objeto Application ver http://msdn.microsoft.com/en-us/library/dd787731(v=office.12).aspx
myoleobject.Workbooks.Add() // objeto Workbooks http://msdn.microsoft.com/en-us/library/bb259439(v=office.12).aspx
// Propiedad ActiveWorkbook del objeto aplication (retorma un workbook) http://msdn.microsoft.com/en-us/library/bb220820(v=office.12).aspx
count = myoleobject.ActiveWorkbook.Sheets.Count
for i = 1 to count
colcount = Integer ( dw_1.object.DataWindow.column.count )
FOR j = 1 TO colcount
colname = dw_1.Describe ( "#" + String ( j ) + ".Name" )
CHOOSE CASE j
CASE 1
colnames = colname
CASE ELSE
colnames = colnames + '~t' + colname
END CHOOSE
NEXT
colnames = colnames + "~r~n"
mydata = dw_1.Object.DataWindow.Data
ClipBoard ( colnames + mydata )
myoleobject.ActiveWorkbook.Sheets(i).Paste()
next
myoleobject.DisconnectObject()
catch ( exception e )
MessageBox ( "Error", e.GetMessage() )
finally
Destroy myoleobject
end try
REFERENCIAS
Visual Basic for Applications Language Reference
http://msdn.microsoft.com/en-us/library/ee441138.aspx
Office client development
http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx
Excel Object Model Reference
http://msdn.microsoft.com/en-us/library/bb149081(v=office.12).aspx
Word Object Model Reference
http://msdn.microsoft.com/en-us/library/bb244515(v=office.12).aspx