Eliminar parámetro de URL en Excel

Eliminar parámetro de URL en Excel

Tengo una URL de la siguiente forma:

http://www.example.com/page.html?param1=asdf&param2=asdfg&param3=asdfgh

Quiero extraer el valor de param2 o 3 de la URL, así como eliminar ese parámetro en particular de la URL. ¿Alguna idea sobre cómo hacer esto usando Excel?

Respuesta1

No creo que Excel tenga funciones integradas para manejar URL, por lo que tendrás que recurrir a combinar creativamente funciones regulares de manipulación de cadenas LEN()como MID()y SEARCH().

Suponiendo que su URL está en la celda A1y el parámetro cuyo valor desea extraer está en la celda B1, pruebe las siguientes fórmulas.

Para obtener el valor del parámetro dado:

=IFERROR(MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))); "")

Para eliminar el parámetro y su valor de la URL:

=IFERROR(REPLACE(A1; SEARCH(B1 & "="; A1); IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) + 1; LEN(A1)); ""); A1)

Nota: dependiendo de su configuración regional, es posible que deba reemplazar todos los puntos y comas en las fórmulas con comas.


Explicación detallada

Para obtener el valor del parámetro dado, primero debemos ubicarlo dentro de la URL:

=SEARCH(B1 & "="; A1)

ElSEARCH()La función ubica el primer parámetro (el parámetro dado) dentro del segundo parámetro (la URL) y devuelve el número de la posición inicial donde ocurre. Tenga en cuenta que agregamos el signo igual al nombre del parámetro para asegurarnos de que estamos buscando lo correcto. De lo contrario, la búsqueda param1podría devolver la ubicación de, por ejemplo, param10si aparece antes en la URL.

Una vez encontrado el parámetro, debemos devolver la parte (o subcadena) de la URL comenzando desde donde comienza el valor del parámetro y terminando justo antes del siguiente signo. Para ello utilizamos elMID()función, que toma tres parámetros: la cadena desde la cual devolver la subcadena, la posición en la que comenzar y el número de caracteres a devolver.

=MID(A1; SEARCH(B1 & "="; A1); LEN(A1))

También estamos usando elLEN()función, que simplemente devuelve la longitud de la cadena dada (en este caso la URL). Esto es solo un marcador de posición por ahora (el tercer parámetro no se volvió opcional hasta Excel 2010), pero será útil más adelante cuando queramos el valor del último parámetro.

Primero necesitamos mover la posición inicial desde el principio del parámetro hasta donde comienza su valor. Para hacerlo, agregamos a la ubicación del parámetro dentro de la cadena su longitud, así como 1 (para el =signo).

=MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; LEN(A1))

Eso es mejor, el valor devuelto comienza en la ubicación correcta. Para que se detenga en la ubicación correcta, debemos ubicar el siguiente signo comercial, que indica dónde comienza el siguiente parámetro.

=SEARCH("&"; A1; SEARCH(B1 & "="; A1))

Estamos usando la SEARCH()función nuevamente, esta vez agregando un tercer parámetro que especifica la posición para iniciar la búsqueda; no nos interesan los símbolos que preceden al parámetro dado, solo los que están después de él.

Para obtener la longitud del valor del parámetro de lo anterior, necesitamos restar la posición donde comienza el parámetro, la longitud del parámetro y nuevamente 1 para el =signo.

=SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1

Esto funciona para todos los parámetros excepto el último, porque no hay un signo comercial al final de la URL. Para ese caso podemos utilizar elIFERROR()función para detectar el error que da Excel y devolver algún número fijo en su lugar. Una buena opción es LEN(A1): se garantiza que la longitud de la cadena será mayor que la longitud de cualquiera de sus subcadenas, y si pasamos esto como tercer argumento a MID(), devolverá todos los caracteres desde la posición dada hasta el final de la cadena. string, que es justo lo que necesitamos.

=IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))

Combinando esto con lo anterior, obtenemos la siguiente fórmula:

=MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1)))

Una última cosa: si B1contiene un parámetro que no existe en la URL, lo anterior devuelve un #VALUEerror. Para devolver una cadena vacía (o cualquier otro valor apropiado) en tal caso, envuelva todo en otro IFERROR():

=IFERROR(MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))); "")

La fórmula para eliminar el parámetro y su valor de la URL es bastante similar, usando elREPLACE()función para reemplazar una subcadena dada de la URL (que se define más o menos de la misma manera que arriba) con una cadena vacía.

Probablemente puedas simplificar un poco las fórmulas moviendo bloques de uso común (como SEARCH(B1 & "="; A1)) a sus propias columnas y haciendo referencia a esas celdas en lugar de escribir la fórmula varias veces. Luego, esas columnas adicionales se pueden ocultar de la vista.

información relacionada