Mostrando las entradas con la etiqueta Excel y Google Drive. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Excel y Google Drive. Mostrar todas las entradas

domingo, 30 de enero de 2022

Descargar archivos de Google Drive a través de macros

Hoy en día en que definitivamente cada vez está más en apogeo el uso de internet, se hace cada vez más masivo el uso de la nube para compartir archivos. Creo yo, casi sin duda, que es probable que Google Drive sea uno de los servicios de alojamiento más usado hoy en día y es por eso que justamente en esta oportunidad veremos algo al respecto.

A veces queremos compartir archivos a través de Google Drive, pero queremos que las demás personas los descarguen, no que necesariamente los vean en línea. Claro, para eso bastaría abrir el archivo en línea y luego usar el menú de descargar, pero podríamos hacer eso de forma automática y directa usando macros desde Excel ¿Cómo? Vamos a ello.

Lo primero es colocar un archivo en Google Drive; yo usaré uno de Excel.

Luego habiliten la opción para compartir (es lo mismo si como editor o lector). El enlace debería ser algo así:

https://docs.google.com/spreadsheets/d/1QhRDyGzLVXpx3mJeZz3_AyGs9eMQZVI8/edit?usp=sharing&ouid=111234567836533797192&rtpof=true&sd=true

La parte que nos interesa es la siguiente:

1QhRDyGzLVXpx3mJeZz3_AyGs9eMQZV

Extraer la cadena que necesitamos no es tan complicado, dado que siempre está antes del último slash del enlace con el cual se comparte el archivo. Para ello podemos hacer lo siguiente, suponiendo que mediante un InputBox ingresamos dicho enlace, y utilizando una matriz en la cual tomemos en cuenta justamente la posición de ese último slash.

Dim iniEnlace$, Cadena$ 
Dim nMatriz As Integer 
Dim mCadenas() As String 

iniEnlace = InputBox("Ingrese el enlace de Google Drive:", "Descarga desde Google Drive - Todo Sobre Excel") 
'Del siguiente modo obtenemos cuántos slash hay en el enlace; como sabemos que el que interesa es el último 
'al tener la cantidad de ellos, nos ayudará a saber la posición de la cadena cuando usemos el enlace como matriz 
nMatriz = Len(iniEnlace) - Len(Application.WorksheetFunction.Substitute(iniEnlace, "/", "")) 
'con split dividimos el enlace como matriz para tener todo separado basado en los slash y obtendrmeos la cadena de nuestro interés 
mCadenas = Split(iniEnlace, "/") Cadena = mCadenas(nMatriz - 1) 

De ese modo en la variable cadena ya tenemos solo lo siguiente:

1QhRDyGzLVXpx3mJeZz3_AyGs9eMQZVI8

Luego, para la descarga final necesitamos generar un enlace de este tipo:

https://drive.google.com/uc?id=1HuDhIYFLvLoDme79gjrwL0QxvPXYzoH5&export=download&authuser=0

Lo que está después del “uc?id=” y antes de la parte que dice “&export” ,es en donde irá la cadena que hemos conseguido previamente. Podemos hacerlo así:

Dim Enlacefinal$ 

Enlacefinal = “https://drive.google.com/uc?id=” & Cadena  & “&export=download&authuser=0” 

Ahora lo que nos falta es la descarga propiamente dicha. Para ello usaremos una función de la API de Windows: URLDownloadToFile (Enlace). Lo primero es declararla para su uso en Excel de 32 bits y de 64 bits.

#If VBA7 Then
    Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _       
	 Alias "URLDownloadToFileA" ( _         
	  ByVal pCaller As LongPtr, _         
	  ByVal szURL As String, _         
	  ByVal szFileName As String, _         
	  ByVal dwReserved As LongPtr, _         
	  ByVal lpfnCB As LongPtr _       
	 ) As Long 
	 
#Else     

    Public Declare Function URLDownloadToFile Lib "urlmon" _       
     Alias "URLDownloadToFileA" ( _         
	 ByVal pCaller As Long, _         
	 ByVal szURL As String, _         
	 ByVal szFileName As String, _         
	 ByVal dwReserved As Long, _         
	 ByVal lpfnCB As Long _       
    ) As Long 
#End If 

Si aquellos/as que tienen Excel de 64 bits ven parte de las letras en rojo, tranquilos, no pasará nada malo.

Y ahora sí, para la descarga usaremos esto:

URLDownloadToFile 0, enlacefinal, "D:\archivodescargado.xlsx", 0, 0

Ojo, obvio ahí uso para el archivo descargado uno del tipo xlsx (que debería coincidir con el que se descargó), pero podría usarse para cualquier tipo de archivo que está en Google Drive y hasta podría usarse una ventana de diálogo para la ruta y tipo de archivo final, pero esa es tarea para ustedes.

Todo se vería así:

Option Explicit 
'Todo Sobre Excel 
'Abraham Valencia 
'https://abrahamexcel.blogspot.com/ 
'https://www.facebook.com/TodosobreExcelAV/ 
'https://twitter.com/Todosobre_Excel 
'https://www.youtube.com/channel/UCxEe3aA5uGrtYDdboBT_ptg 
'Lima, Perú 
'Enero del 2022   

#If VBA7 Then
    Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _       
	 Alias "URLDownloadToFileA" ( _         
	  ByVal pCaller As LongPtr, _         
	  ByVal szURL As String, _         
	  ByVal szFileName As String, _         
	  ByVal dwReserved As LongPtr, _         
	  ByVal lpfnCB As LongPtr _       
	 ) As Long 
	 
#Else     

    Public Declare Function URLDownloadToFile Lib "urlmon" _       
     Alias "URLDownloadToFileA" ( _         
	 ByVal pCaller As Long, _         
	 ByVal szURL As String, _         
	 ByVal szFileName As String, _         
	 ByVal dwReserved As Long, _         
	 ByVal lpfnCB As Long _       
    ) As Long 
#End If 

Sub DescargarArchivos() 

Dim iniEnlace$, Cadena$, Enlacefinal$ 
Dim nMatriz As Integer Dim mCadenas() As String 

iniEnlace = InputBox("Ingrese el enlace de Google Drive:", "Descarga desde Google Drive - Todo Sobre Excel") 

If iniEnlace = Empty Then      
	MsgBox "Usted no escribió nada o canceló", vbOKOnly, "Todo Sobre Excel"     
	Exit Sub 
End If 

'Del siguiente modo obtenemos cuántos slash hay en el enlace; como sabemos que el que interesa es el último 
'al tener la cantidad de ellos, nos ayudará a saber la posición de la cadena cuando usameo el enlace como matriz 
nMatriz = Len(iniEnlace) - Len(Application.WorksheetFunction.Substitute(iniEnlace, "/", "")) 
'con split dividimos el enlace como matriz para tener todo separado basado en los slash y obtendremos la cadena de nuestro interés 
mCadenas = Split(iniEnlace, "/") 
'Elegimos el valor de la matriz en donde sabemos está la cadena que nos interesa 
Cadena = mCadenas(nMatriz - 1) 

Enlacefinal = "https://drive.google.com/uc?id=" & Cadena & "&export=download&authuser=0" 

URLDownloadToFile 0, Enlacefinal, "D:\archivodescargado.xlsx", 0, 0 

MsgBox "Archivo descargado", vbOKOnly, "Todo Sobre Excel" End Sub 

End Sub 

Y listo, eso es todo por hoy. Espero les sea útil. ¡Hasta la próxima!

Abraham Valencia
Lima, Perú

Descargue el archivo aquí: Enlace

viernes, 9 de agosto de 2019

Datos de encuestas en línea a través de Excel y Power Query (I): Formularios Google, Hoja de Cálculo de Google y Google Drive

Ya hace varias semanas escribí sobre cómo conectar Excel con un archivo de la Hoja de Cálculo de Google (Enlace) y con un archivo de Excel que se encuentra en OneDrive Personal (Enlace). A raíz de esos artículos algunas personas me preguntaron que si era posible hace encuestas y, tal cuál como los ejemplos citados, conectarlas con un archivo de Excel en nuestra PC. Probablemente lo primero que uno dirá es que casi todas las encuetas en línea tienen la herramienta para exportar a Excel, pero la idea es no tener que estar entrando a la encuesta sino hacerlo todo desde nuestra PC. Pues bueno, eso es lo que haremos hoy.

Comenzaremos con los Formularios de Google (Personal). Crearemos una encuesta para el ejemplo con solo cuatro preguntas.

Para poder probar formatos, como ven, una es de texto, otra de fecha, una con opción de elección y una última numérica. Luego en la parte superior de la encuesta vamos a elegir la opción “Respuestas” y en ella veremos un botón verde (“Crear hoja de cálculo) al que le daremos clic.

En las opciones que salen elijan la que mejor les convenga; yo pondré “Crear una hoja de cálculo”.

Si hicimos todo bien tendremos algo como esto en nuestra pantalla:

Supongamos que ya difundieron el enlace de la encuesta y en ella ya hay varios datos que queremos ir viendo/analizando en nuestro Excel, entonces lo que haremos ahora es ir al menú “Archivo” en nuestra hoja de cálculo de Google y elegir la opción “Publicar en la Web” (a partir de aquí casirepetiré pasos de un artículo anterior, pero realmente creo que vale la pena).

En el cuadro de dialogo que sale vamos a elegir, en la primera lista, el nombre de la encuesta (en mi caso “Respuestas de formulario 1”) y en la segunda lista vamos a elegir la opción “Valores separados por tabuladores (.tsv)”. En la parte inferior verificar que el check de “Volver a publicar automáticamente cuando se hagan cambios” esté activado. Ahora démosle clic al botón “Publicar”.

Luego de ello, Google nos brindará un enlace que debemos copiar. No olvidar eso o no podremos realizar la conexión.

Luego de todo eso, vamos Excel. En el libro y hoja en donde queremos los datos vamos a la pestaña “Datos” y en el grupo “Obtener y transforma datos” vamos a darle clic al botón “Desde el texto/CSV” y en el cuadro de dialogo que se abrirá, pegaremos el enlace de Google en la parte de “Nombre de archivo:”

Veremos cómo se abre el editor de Power Query y ahí le daremos doble clic a la imagen en donde dice “docs.google.com”.

El resultado, si hicimos todo bien, debe ser similar a este:

Si lo notaron, es como que todos los datos están en una sola columna, pero no se preocupen, ya lo arreglaremos. Además, si al igual que en mi caso hay tildes en las respuestas y algunos datos se ven con caracteres raros como en la imagen anterior, no se preocupen, hay una forma de arreglarlo. En el editor de Power Query vamos a la pestaña “Inicio” y en el grupo “Consulta” elige el botón “Editor avanzado” y al abrirse buscaremos los siguiente:

¿Ven el número 1252? Pues reemplácenlo por el 65001, que es el correspondiente al formato UTF-8, denle clic al botón “Listo” y ahora los datos se verán así:

Ahora elijan la pestaña “Transformar” y en el grupo “Tabla” elige “Usar la primera fila como encabezado” y en la lista que se despliega elige la opción del mismo nombre. En el grupo “Columna de texto” elige “Dividir columna” y ahí “Por delimitador”, en el cuadro que tendrán a la vista, verifiquen que estas opciones estén activadas y denle click a “Aceptar”:

Nuestros datos se verán, ahora, algo así:

Si se dan cuenta los encabezados están precedidos de las palabras “Marca temporal”, no se preocupen, denles doble clic y edítenlos. No olviden que, si bien la encuesta tiene cuatro preguntas, Google adiciona una (la del extremo izquierdo) en donde guarda la fecha y hora en que se ingresaron los datos respectivos.

En la pestaña “Archivo” elijan “Cerrar y cargar” para enviar los datos a nuestra hoja de Excel.

Ahora en la pestaña “Datos” de la Cinta de Opciones, vayan al grupo “Consultas y conexiones”, denle clic al botón “Actualizar todo” y en la lista respectiva elijan “Propiedades de conexión…” y en la pestaña “Uso” activen, si lo desean, “Actualizar cada” y coloquen la cantidad de minutos deseados, activen la opción “Actualizar al abrir el archivo” y verifiquen que la opción “Actualizar esta conexión en Actualizar Todo” esté activada; por último, activar “Habilitar la carga de datos”.

Listo, ahora nuestra hoja de Excel se actualizará con los datos que se cambien/agreguen/eliminen en nuestra encuesta, ah, y lo bueno es que se respetarán los encabezados que editamos, así como las tildes. Espero les sea útil. Hasta la próxima.

Abraham Valencia

lunes, 30 de julio de 2018

Excel y Google Drive

Definitivamente una de las “nubes” más usadas para compartir archivos hoy en día debe ser “Google Drive” y definitivamente muchos usuarios de Excel también la usan para compartir y/o trabajar archivos con otras personas, priorizando incluso su uso por sobre “OneDrive” y/o Excel Online.

Lo que muchos/as no saben es que cuando se carga un archivo de Excel en “Google Drive” y se intenta abrir en línea, lo que dicha “nube” hace es convertir dicho archivo en una “Hoja de Cálculo de Google” que es, en estricto, otro programa y por ende otro formato de archivo, es decir, deja de tener formato de Excel a pesar de que el aspecto es muy similar e incluso los nombres de muchas funciones son iguales (Google las hizo así por cuestiones de compatibilidad), lo que no es de extrañar dado que ambos son el mismo tipo de programa: Hojas de cálculo (y sí, la “Hoja de Cálculo de Google” lo que hizo es tomar el nombre en base al tipo de programa).

Algo importante es no olvidar que así haya compatibilidad entre programas, eso de ningún modo asegura que las características y/o fórmulas usadas permanezcan y/o funcionen tal cual lo hacen en Excel una vez que las tenemos en “Google Drive” y queremos usarlas en línea. Una característica que no es compatible, son las macros de Excel, ya que el lenguaje usado en ellas es el VBA mientras que la “Hoja de Cálculo de Google” usa Google Apps Scripts como lenguaje de programación. Una de las preguntas más recurrentes en los foros es justamente el uso de las macros de Excel en archivos colocados en “Google Drive” pero como quizás ya entendieron, pues no, no se pueden usar.

Entonces ¿es conveniente para los usuarios/as de Excel usar “Google Drive”? Pues para compartir archivos, es decir cargar y descargar, es totalmente apto como casi toda “nube”, pero si se trata de trabajar en conjunto, pues ya saben que, al no ser los mismos programas, así como hay compatibilidades también hay limitaciones y por supuesto si se trata de macros, no hay forma de hacerlas compatibles.

Hasta la próxima.

Abraham Valencia