Skip to Content

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

To report this post you need to login first.

3 Comments

You must be Logged on to comment or reply to a post.

      1. Cesar Parejas

        Hola Oscar, gracias por el aporte. Y para abrir un documento en PDF usando OleObject, cual sería el objeto Ole y la funcion que abre el documento? Gracias!

        (0) 

Leave a Reply