Ahora con la IA y YouTube y todo lo que existe es fácil generar cualquier fórmula, pero no siempre se obtiene lo que esperamos. Como algo útil en varias ocasiones, me toco extraer el el nombre de archivo de un path o URL para mostrarlo en unas hermosas tablas de Excel
Objetivo
Extraer el último elemento de una ruta de archivo o URL, ya sea que use barras invertidas (\) o barras inclinadas (/) como separadores, y limpiar cualquier "%20" residual.
Fórmula
=IFERROR(RIGHT([@Object],LEN([@Object])-FIND("~",SUBSTITUTE([@Object],"\","~",LEN([@Object])-LEN(SUBSTITUTE([@Object],"\",""))))),SUBSTITUTE(RIGHT([@Object],LEN([@Object])-FIND("~",SUBSTITUTE([@Object],"/","~",LEN([@Object])-LEN(SUBSTITUTE([@Object],"/",""))))),"%20"," "))
Donde dice @Object es el campo de la tabla que tiene el Path completo
Por ejemplo
- Si tengo c:\Users\Locomia\es_un_archivo.xlsx obtengo: es_un_archivo.xlsx
- Si tengo https://dominio.com/archivo%20ejemplo.doc obtengo: archivo ejemplo.doc
Lo bueno que funciona con múltiples niveles de carpeta 😏
Explicación paso a paso
Parte 1: Encontrar el último separador (ya sea \ o /)
LEN([@Object]): Esto obtiene la longitud total de la cadena de texto (tu ruta de archivo o URL) que está en la celda[@Object].SUBSTITUTE([@Object],"\",""): Esto reemplaza todas las barras invertidas (\) en tu cadena por nada, es decir, las elimina.LEN(SUBSTITUTE([@Object],"\","")): Esto calcula la longitud de la cadena después de haber eliminado todas las barras invertidas.LEN([@Object])-LEN(SUBSTITUTE([@Object],"\","")): La diferencia entre la longitud original y la longitud sin barras invertidas te da cuántas barras invertidas hay en total en la cadena.SUBSTITUTE([@Object],"\","~",LEN([@Object])-LEN(SUBSTITUTE([@Object],"\",""))): Esta es la parte clave. Aquí, usamosSUBSTITUTEde una manera especial. Le decimos que reemplace la barra invertida (\) por un carácter temporal que es muy poco probable que aparezca en tu ruta (en este caso,~), pero solo lo haga para la última ocurrencia de la barra invertida. La cantidad de veces que debe sustituir (el cuarto argumento deSUBSTITUTE) es el número total de barras invertidas que calculamos antes. Esto significa que la última barra invertida se convierte en~.FIND("~", ...): Una vez que la última barra invertida se ha convertido en~, usamosFINDpara encontrar la posición de ese~. Esta posición es la ubicación del último separador de barra invertida.
Lo mismo ocurre con la parte de la barra inclinada (/):
SUBSTITUTE([@Object],"/","~",LEN([@Object])-LEN(SUBSTITUTE([@Object],"/",""))): Hace exactamente lo mismo, pero para el separador de barra inclinada (/).FIND("~", ...): Encuentra la posición del último separador de barra inclinada.
Parte 2: Extraer el texto después del último separador
LEN([@Object])-FIND("~",...):Una vez que tenemos la posición del último separador (~), restamos esa posición de la longitud total de la cadena. Esto nos da la cantidad de caracteres que están después del último separador.RIGHT([@Object], LEN([@Object])-FIND("~",...)): Finalmente, la funciónRIGHTextrae un número específico de caracteres del final de una cadena. En este caso, extrae todos los caracteres que están después del último separador, lo que efectivamente nos da el último elemento de la ruta (el nombre del archivo o la última parte de la URL).
Parte 3: Limpiar "%20"
SUBSTITUTE(...,"%20"," "): Después de extraer el último elemento, es común que las URL o los nombres de archivo codificados web usen%20para representar espacios. Esta parte de la fórmula reemplaza todos los%20por un espacio real ( ) para que el nombre sea más legible.
Parte 4: IFERROR (Manejo de errores)
Ahora, la parte más externa:IFERROR(valor, valor_si_error): Esta función es una red de seguridad.
La primera parte de la fórmula (la que busca la barra invertida\) es elvalor.- Si esa parte de la fórmula genera un error (por ejemplo, si la ruta no contiene ninguna barra invertida
\), entoncesIFERRORejecuta elvalor_si_error. - El
valor_si_errores la segunda parte de la fórmula (la que busca la barra inclinada/) y luego limpia%20.
- Si esa parte de la fórmula genera un error (por ejemplo, si la ruta no contiene ninguna barra invertida
En resumen:
- Intenta extraer el último elemento asumiendo que el separador es una barra invertida (\).
- Si eso no funciona o no hay barras invertidas (genera un error), entonces intenta extraer el último elemento asumiendo que el separador es una barra inclinada (/).
- Una vez que ha extraído el último elemento (ya sea usando \ o /), reemplaza cualquier %20 por espacios.
Referencias
- https://excelchamps.com/formulas/get-file-name/
- https://www.exceltip.com/excel-text-formulas/how-to-get-filename-in-excel.html
- https://exceltrick.com/how-to/extract-filenames-from-filepath/



0 comments:
Publicar un comentario