martes, 7 de abril de 2009

Consumir Web Services desde Office Excel

Continuando con la publicación anterior, hoy quiero mostrarles la forma de conectarnos a un Web Services desde Microsoft Office Excel 2003. Si aún no haz leido la publicación anterior, es bueno que lo hagas ahora en Web Services con Word 2003, ya que hoy saltaré al código inmediatamente, puesto que la forma de utilización es la misma.


Y como ya tenemos instalado el Microsoft Office 2003 Web Services Toolkit 2.01, abre Microsoft Excel y dirígete a “Herramientas/Macro/Macros…” y creas una macro llamada “macroIndicadores”


Una vez abierto el editor de Microsoft Visual Basic, ir al menú “Herramientas/Web Services Referentes…”.


Seleccionar la opción “Dirección URL del servicio Web” e ingresar la URL de Web Services, que en nuestro caso será http://www.desachile.com/webservice.asmx , luego presionar “Buscar” y seleccionar el servicio que se muestra y presionar “Agregar”.




Ahora nos vamos a nuestra macro creada anteriormente (macroIndicadores) y escribimos el siguiente código:


Sub macroIndicadores()
'
' macroIndicadores Macro
' Macro creada el 06/04/2009 por Toby
'
Dim indica As New clsws_Servicios
Dim oFullNodeList As MSXML2.IXMLDOMNodeList
Dim oFilteredNodeList As MSXML2.IXMLDOMNodeList
Dim oNode As MSXML2.IXMLDOMNode
Dim xdd As MSXML2.DOMDocument30
Dim xdlRows As MSXML2.IXMLDOMNodeList
Dim iRow As Integer
Dim valor As String
Dim lcntRows As Integer
Dim uf As String
Dim usd As String
Dim euro As String
Dim utm As String

Set oFullNodeList = indica.wsm_Indicadores("06", "04", "2009")
Set oFilteredNodeList = oFullNodeList.Item(1).selectNodes("NewDataSet")

Set xdd = New MSXML2.DOMDocument30

With xdd
.async = False
.preserveWhiteSpace = True
.loadXML oFullNodeList.Item(1).XML
Set xdlRows = xdd.selectNodes("//indicadores")
End With

lcntRows = xdlRows.Length - 1

For Each oNode In oFilteredNodeList
For iRow = 0 To lcntRows
uf = oNode.childNodes.Item(iRow).selectSingleNode("UF.valor").Text
usd = oNode.childNodes.Item(iRow).selectSingleNode("USD.valor").Text
euro = oNode.childNodes.Item(iRow).selectSingleNode("EURO.valor").Text
utm = oNode.childNodes.Item(iRow).selectSingleNode("UTM.valor").Text
Next
Next
Hoja1.Cells(2, 2) = "Indicadores Económicos del Día"
Hoja1.Cells(4, 2) = "uf"
Hoja1.Cells(5, 2) = "usd"
Hoja1.Cells(6, 2) = "euro"
Hoja1.Cells(7, 2) = "utm"

Hoja1.Cells(4, 3) = uf
Hoja1.Cells(5, 3) = usd
Hoja1.Cells(6, 3) = euro
Hoja1.Cells(7, 3) = utm

End Sub

Luego de ejecutar la macro, el resultado será:



Si te has fijado bien, el código es exactamente el mismo a la publicación anterior Web Services con Word 2003 exepto por la forma de como mostrarás los valores. Más sencillo no puede ser.


Es todo por hoy y hasta la próxima publicación.


Saludos, Toby

2 comentarios:

  1. Hola mi amigo gracias por los tutos estan muy buenos, oye me manda el siguiente error:

    No se a definido el tipo definido por el usuario y marca con negro lo siguiente :Dim indica As New clsws_Servicios

    este es mi codigo

    Sub DatosArticulosDC()
    ' macroIndicadores Macro
    ' Macro creada el 06/04/2009 por Toby
    '
    Dim indica As New clsws_Servicios
    Dim oFullNodeList As MSXML2.IXMLDOMNodeList
    Dim oFilteredNodeList As MSXML2.IXMLDOMNodeList
    Dim oNode As MSXML2.IXMLDOMNode
    Dim xdd As MSXML2.DOMDocument30
    Dim xdlRows As MSXML2.IXMLDOMNodeList
    Dim iRow As Integer
    Dim valor As String
    Dim lcntRows As Integer
    Dim Usuario As String 'uf
    Dim Contraseña As String ' usd
    Dim Articulo As String 'euro


    Set oFullNodeList = indica.wsm_obtenerDatosIdArticulo()
    Set oFilteredNodeList = oFullNodeList.Item(1).selectNodes("NewDataSet")

    Set xdd = New MSXML2.DOMDocument30

    With xdd
    .async = False
    .preserveWhiteSpace = True
    .LoadXml oFullNodeList.Item(1).XML
    Set xdlRows = xdd.selectNodes("//DatosArticulos")
    End With

    lcntRows = xdlRows.Length - 1

    For Each oNode In oFilteredNodeList
    For iRow = 0 To lcntRows
    Usuario = oNode.childNodes.Item(iRow).selectSingleNode("grupo.valor").Text
    Contraseña = oNode.childNodes.Item(iRow).selectSingleNode("Gaoma.valor").Text
    Articulo = oNode.childNodes.Item(iRow).selectSingleNode("92274A.valor").Text

    Next
    Next
    Hoja1.Cells(2, 2) = "DatosArticulos DC Mayoristas"
    Hoja1.Cells(4, 2) = "Usuario"
    Hoja1.Cells(5, 2) = "Contraseña"
    Hoja1.Cells(6, 2) = "Articulo"


    Hoja1.Cells(4, 3) = Usuario
    Hoja1.Cells(5, 3) = Contraseña
    Hoja1.Cells(6, 3) = Articulo



    End Sub


    espero me puedas indicar que me hace falta. gracias por todo

    ResponderEliminar
  2. hola necesito consumir este web service desde excel 2010 pero no encuentro la forma































































































































































    ResponderEliminar

Entradas populares