{"id":6148,"date":"2018-10-20T19:19:15","date_gmt":"2018-10-21T00:19:15","guid":{"rendered":"https:\/\/itsoftware.com.co\/content\/?p=6148"},"modified":"2023-03-16T16:49:41","modified_gmt":"2023-03-16T21:49:41","slug":"consumir-webservices-microsoft-excel","status":"publish","type":"post","link":"https:\/\/itsoftware.com.co\/content\/consumir-webservices-microsoft-excel\/","title":{"rendered":"Consumir webservices desde Microsoft Excel &#8211; GET y POST"},"content":{"rendered":"<p>En este art\u00edculo tratar\u00e9 sobre la forma de consumir <strong>WebServices<\/strong> desde Microsoft excel, usando este programa como un cliente sencillo para WebServices sin autenticaci\u00f3n.<\/p>\n<figure id=\"attachment_6155\" aria-describedby=\"caption-attachment-6155\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\"size-full wp-image-6155\" src=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2018\/10\/Consumir-WebServices-desde-Excel.jpg\" alt=\"Consumir WebServices desde Excel\" width=\"600\" height=\"326\"><figcaption id=\"caption-attachment-6155\" class=\"wp-caption-text\">Consumir WebServices desde Excel<\/figcaption><\/figure>\n<p><!--more--><\/p>\n<p>Vale la pena recordar que un <strong>WebService<\/strong> es un medio para permitir transacciones de datos entre aplicaciones heter\u00f3geneas.<\/p>\n<p>Un <strong>WebService<\/strong> dispuesto en una m\u00e1quina, expone una serie de m\u00e9todos que permiten unas transacciones bien definidas con su base de datos; como por ejemplo: consultar cierta informaci\u00f3n, agregar, editar o eliminar registros.<\/p>\n<p>As\u00ed pues un WebService define unos mecanismos restringuidos con los que se van a poder realizar ciertas transacciones sobre los datos de un servidor. Para hacerlas m\u00e1s seguras, generalmente se usan conexiones autenticadas y encriptadas por SSL.<\/p>\n<p>En Microsoft Excel es posible realizar el consumo de <strong>WebServices<\/strong> sin autenticaci\u00f3n para integrar informaci\u00f3n de otras fuentes, sin tener que importarlas o copiarlas desde sus or\u00edgenes.&nbsp; En Excel se pueden consumir WebServices que usan m\u00e9todos GET y POST para el paso de par\u00e1metros al servidor. En seguida vamos a tratar en m\u00e1s detalle sobre el uso en cada uno de ellos:<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>1. Consumir WebServices con m\u00e9todos GET<\/strong><\/h2>\n<p>Para consumir WebServices con env\u00edo de par\u00e1metros por el m\u00e9todo GET, se usa una f\u00f3rmula llamada SERVICIOWEB(url), que recibe como par\u00e1metro la url del webservice y su variables.<\/p>\n<p><em>Ejemplo<\/em>:<\/p>\n<p>En este ejemplo deseamos usar un WebService para que nos traiga la tasa de cambio actual de COP$ a USD$,&nbsp; con el fin de actualizar los precios en pesos colombianos de unos productos con precios en d\u00f3lares.<\/p>\n<p>Para eso usaremos el siguiente WebService:<\/p>\n<pre>https:\/\/free.currencyconverterapi.com\/api\/v6\/convert?q=USD_COP&amp;compact=ultra<\/pre>\n<p>donde podemos ver los par\u00e1metros GET en <em><strong>q= USD_COP<\/strong><\/em> y <strong><em>compact=ultra<\/em><\/strong><\/p>\n<p>Para consumir el WebService, se introduce la url dentro de la f\u00f3rmula SERVICIOWEB, quedando as\u00ed:<\/p>\n<pre>=SERVICIOWEB(\"https:\/\/free.currencyconverterapi.com\/api\/v6\/convert?q=USD_COP&amp;compact=ultra\")<\/pre>\n<p>Cuando la terminamos de introducir nos retorna la tasa de cambio en un formato JSON compacto as\u00ed:<\/p>\n<pre>{\"USD_COP\":3078.25}<\/pre>\n<p>Para extraer el valor, y cambiar el punto (.) por una coma (,), que es el formato decimal usado en Colombia, usamos la siguiente f\u00f3rmula:<\/p>\n<pre>=SUSTITUIR(EXTRAE(F1;ENCONTRAR(\":\";F1)+1;LARGO(F1)-ENCONTRAR(\":\";F1)-1);\".\";\",\")<\/pre>\n<p>As\u00ed nuestro ejemplo en Excel quedar\u00eda de la siguiente forma:<\/p>\n<figure id=\"attachment_6150\" aria-describedby=\"caption-attachment-6150\" style=\"width: 911px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"size-full wp-image-6150\" src=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2018\/10\/Consumir-webservices-en-Excel-m\u00e9todo-get.png\" alt=\"Consumir webservices en Excel m\u00e9todo get\" width=\"911\" height=\"241\"><figcaption id=\"caption-attachment-6150\" class=\"wp-caption-text\">Consumir webservices en Excel m\u00e9todo get<\/figcaption><\/figure>\n<p>Cada vez que ingresemos a esta p\u00e1gina se recalcular\u00e1 el valor en la celda de la tasa de cambio, con el valor retornado por el WebService.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>2. Consumir Webservices con m\u00e9todo POST<\/strong><\/h2>\n<p>Cuando tenemos un WebService al que se le env\u00edan los par\u00e1metros por el m\u00e9todo POST, no se puede usar la f\u00f3rmula SERVICIOWEB. Esto ocurre porque cuando se usa el m\u00e9todo POST los par\u00e1metros no se env\u00edan en la url.<\/p>\n<p>As\u00ed que para este tipo de WebServices se requiere crear una macro para el env\u00edo de los par\u00e1metros POST.<\/p>\n<p><em>Ejemplo<\/em>:<\/p>\n<p>En esta ocasi\u00f3n vamos a trabajar con un WebService que entrega informaci\u00f3n de entrada y salida de un lugar, desde una fecha inicial a una fecha final:<\/p>\n<figure id=\"attachment_6151\" aria-describedby=\"caption-attachment-6151\" style=\"width: 1074px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"size-full wp-image-6151\" src=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2018\/10\/Consumir-webservices-en-Excel-m\u00e9todo-post.png\" alt=\"Consumir webservices en Excel m\u00e9todo post\" width=\"1074\" height=\"341\"><figcaption id=\"caption-attachment-6151\" class=\"wp-caption-text\">Consumir webservices en Excel m\u00e9todo post<\/figcaption><\/figure>\n<p>Entonces nuestro objetivo es consumirlo y organizarlo en una hoja de Excel. En la hoja de Excel reservamos unas celdas para incluir los par\u00e1metros de entrada del webservice (<em>Fecha Incial<\/em>, <em>Fecha Final<\/em> y <em>Ubicaci\u00f3n<\/em>), y un bot\u00f3n llamado <em>Actualizar Datos<\/em> para consumir el WebService con los par\u00e1metros indicados a la izquierda:<\/p>\n<figure id=\"attachment_6152\" aria-describedby=\"caption-attachment-6152\" style=\"width: 962px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-6152\" src=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2018\/10\/Consumir-webservices-en-Excel-post-Consumo.png\" alt=\"Consumir webservices en Excel post Consumo\" width=\"962\" height=\"80\"><figcaption id=\"caption-attachment-6152\" class=\"wp-caption-text\">Consumir webservices en Excel post Consumo<\/figcaption><\/figure>\n<p>Ahora incluimos el siguiente c\u00f3digo para el consumo del webservice:<\/p>\n<pre>Sub Webservice()\n\n<span style=\"color: #ff0000;\"><strong>' Se ingresan los encabezados de los datos en la hoja<\/strong><\/span>\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"A:F\").Clear\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"A\" &amp; 1).Value = \"Fecha\"\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"B\" &amp; 1).Value = \"Ubicaci\u00f3n\"\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"C\" &amp; 1).Value = \"CC\"\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"D\" &amp; 1).Value = \"Lista\"\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"E\" &amp; 1).Value = \"Hora Ingreso\"\nActiveWorkbook.Sheets(\"Hoja1\").Range(\"F\" &amp; 1).Value = \"Hora Salida\"\n\n<strong><span style=\"color: #ff0000;\">' Se almacenan los par\u00e1metros de entrada del WebService, ubicados en las celdas<\/span> <\/strong>\nfi = ActiveWorkbook.Sheets(\"Hoja1\").Cells(2, 8).Value\nff = ActiveWorkbook.Sheets(\"Hoja1\").Cells(2, 9).Value\nUbicacion = ActiveWorkbook.Sheets(\"Hoja1\").Cells(2, 10).Value\n\n<strong><span style=\"color: #ff0000;\">' Se crea el objeto que consumir\u00e1 el webservice<\/span><\/strong>\nSet objHTTP = CreateObject(\"MSXML2.ServerXMLHTTP\")\n\n<strong><span style=\"color: #ff0000;\">' Se crea el objeto que almacenar\u00e1 el resultado del webservice en formato XML<\/span><\/strong>\nSet xmlDoc = CreateObject(\"MSXML2.DOMDocument\")\n\nURL = \"http:\/\/localhost:57371\/WebService.asmx\/GetData\"\n\n<strong><span style=\"color: #ff0000;\">' Se gestiona el webservice con su URL y dem\u00e1s par\u00e1metros<\/span><\/strong>\nobjHTTP.Open \"POST\", URL, False\nobjHTTP.setRequestHeader \"Content-Type\", \"application\/x-www-form-urlencoded\"\nPayload = \"fi=\" + fi + \"&amp;ff=\" + ff + \"&amp;ubicacion=\" + Ubicacion\nobjHTTP.send (Payload)\n\n<strong><span style=\"color: #ff0000;\">' Se guarda el XML de respuesta<\/span><\/strong>\nxmlDoc.LoadXML objHTTP.responseText\n\n<strong><span style=\"color: #ff0000;\">' Se leen los nodos del XML<\/span><\/strong>\nSet FechaNodes = xmlDoc.SelectNodes(\"\/ArrayOfResultado\/Resultado\/fecha\/text()\")\nSet CCNodes = xmlDoc.SelectNodes(\"\/ArrayOfResultado\/Resultado\/cc\/text()\")\nSet HoraiNodes = xmlDoc.SelectNodes(\"\/ArrayOfResultado\/Resultado\/horai\/text()\")\nSet HorafNodes = xmlDoc.SelectNodes(\"\/ArrayOfResultado\/Resultado\/horaf\/text()\")\nSet UbicacionNodes = xmlDoc.SelectNodes(\"\/ArrayOfResultado\/Resultado\/ubicacion\/text()\")\nSet ListaNodes = xmlDoc.SelectNodes(\"\/ArrayOfResultado\/Resultado\/lista\/text()\")\n\n<strong><span style=\"color: #ff0000;\">' Se escriben los datos del XML en las filas de la hoja de Excel<\/span><\/strong>\nFor i = 0 To (FechaNodes.Length - 1)\n  Fecha = FechaNodes(i).NodeValue\n  CC = CCNodes(i).NodeValue\n  Horai = HoraiNodes(i).NodeValue\n  Ubicacion = UbicacionNodes(i).NodeValue\n  Lista = ListaNodes(i).NodeValue\n  Horaf = HorafNodes(i).NodeValue\n\n  ActiveWorkbook.Sheets(\"Hoja1\").Range(\"A\" &amp; i + 2).Value = Fecha\n  ActiveWorkbook.Sheets(\"Hoja1\").Range(\"B\" &amp; i + 2).Value = Ubicacion\n  ActiveWorkbook.Sheets(\"Hoja1\").Range(\"C\" &amp; i + 2).Value = CC\n  ActiveWorkbook.Sheets(\"Hoja1\").Range(\"D\" &amp; i + 2).Value = Lista\n  ActiveWorkbook.Sheets(\"Hoja1\").Range(\"E\" &amp; i + 2).Value = Horai\n  ActiveWorkbook.Sheets(\"Hoja1\").Range(\"F\" &amp; i + 2).Value = Horaf\nNext\n\nEnd Sub<\/pre>\n<p>Finalmente, cuando presionamos el bot\u00f3n <strong><em>Actualizar Datos<\/em><\/strong>, tendremos los datos consumidos del WebService, organizados en la hoja de Excel:<\/p>\n<figure id=\"attachment_6153\" aria-describedby=\"caption-attachment-6153\" style=\"width: 1184px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-6153\" src=\"https:\/\/itsoftware.com.co\/content\/wp-content\/uploads\/2018\/10\/Consumir-webservices-en-Excel-post-Consumo-Final.png\" alt=\"Consumir webservices en Excel post Consumo Final\" width=\"1184\" height=\"208\"><figcaption id=\"caption-attachment-6153\" class=\"wp-caption-text\">Consumir webservices en Excel post Consumo Final<\/figcaption><\/figure>\n<p>Como podemos ver, las funciones de consumo de WebServices nos permite transacciones desde Excel a otras aplicaciones, sin importar en qu\u00e9 arquitectura, base de datos o lenguajes de programaci\u00f3n fueron constru\u00eddas, s\u00f3lo se requieren los m\u00e9todos y los par\u00e1metros necesarios para intercambiar informaci\u00f3n entre las aplicaciones.<\/p>\n<p>Este art\u00edculo hace parte del sistema de divulgaci\u00f3n de conocimiento de <a href=\"http:\/\/itsoftware.com.co\">ITSoftware SAS<\/a>.<\/p>\n<h3>Si te gust\u00f3, por favor no olvides compartirlo en las redes sociales. \ud83d\ude09<\/h3>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo tratar\u00e9 sobre la forma de consumir WebServices desde Microsoft excel, usando este programa como un cliente sencillo para WebServices sin autenticaci\u00f3n.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[305,1498,229],"tags":[1522,1521],"class_list":["post-6148","post","type-post","status-publish","format-standard","hentry","category-automatizacion","category-excel","category-ms-office","tag-servicioweb","tag-webservice"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/posts\/6148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/comments?post=6148"}],"version-history":[{"count":0,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/posts\/6148\/revisions"}],"wp:attachment":[{"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/media?parent=6148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/categories?post=6148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itsoftware.com.co\/content\/wp-json\/wp\/v2\/tags?post=6148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}