[RESUELTO] Macro para obtener datos web

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
guidogulp
Mensajes: 22
Registrado: Lun May 02, 2011 4:19 pm

[RESUELTO] Macro para obtener datos web

Mensaje por guidogulp »

Hasta ahora he tenido gratas experiencias en la comunidad y pude resolver todos los problemas que presenté, por lo que vengo de nuevo.

Necesito crear una macro que me obtenga los datos de una web, así de simple (simple?)

La URL es http://www.dolarsi.com/cotizaciones_ant ... anio1=2011

con esa dirección puedo modificar las fechas cosa de sacar los datos para cada mes ya que necesito hacerlo para el resto del año fiscal

Muchas gracias!!


Editado por el moderador (mauricio) para eliminar el tema duplicado, con una vez que publiques tu mensaje en el foro adecuado es más que suficiente. Si no lo has hecho aún por favor lee la Guía de supervivencia
Última edición por guidogulp el Vie May 20, 2011 1:25 am, editado 1 vez en total.
OpenOffice.org 3.3.0 en Windows 7
Avatar de Usuario
ifanlo
Mensajes: 420
Registrado: Lun Mar 30, 2009 10:32 am

Re: Macro para obtener datos web

Mensaje por ifanlo »

Hola, guidogulp!

Por el momento con método manual sin macros, pero nunca había importado datos de una web y tu ejemplo me ha venido al pelo.

En el ejemplo que adjunto, establezco los límites de fechas y a partir de ahí, se me crea una celda (D2) con la dirección URL deseada.

1) Me situo en esa celda y copio con Ctrl+C
2) Me desplazo a D6 (o donde desees importar la tabla)
3) Insertar > Vincular con datos externos y aparecerá un diálogo "Datos externos"
4) En "URL de la fuente de datos externa", pegar con Ctrl+V y se pegará el contenido de la URL que antes copiamos.
5) Pulsar Intro (paciencia, que tarda un poquito en responder)
6) Aceptar sin más en el diálogo "Opciones de importación" que aparece
7) En el diálogo "Datos externos" se mostrarán las tablas detectadas. Seleccionar HTML_19 (si cambian el diseño de la página, esto puede cambiar) y Aceptar

Tras una breve pausa se pegará el contenido de la tabla.

Hay que reconocer que Excel hace estas cosas mucho más fáciles... con el tiempo seguro que nosotros también lo tendremos mucho más fácil.

Sobre la posible automatización con macros, doctores tiene la iglesia.... y yo no soy uno de ellos. :-D
El intento que hice de usar la grabadora de macros se atascó en los servicios ".uno:InsertExternalDataSource" y ".uno:TerminateInplaceActivation". Por eso te pedirá si deseas activar macros, pero no funciona.

Saludos,
Adjuntos
importar-datos-web.ods
(18.19 KiB) Descargado 5883 veces
Ismael Fanlo

*ifanlo - soluciones libres* http://ifanlo.com
- Consultoría en migraciones a software libre
- Soporte ofimático online
- E-learning
- Formación informática presencial
guidogulp
Mensajes: 22
Registrado: Lun May 02, 2011 4:19 pm

Re: Macro para obtener datos web

Mensaje por guidogulp »

Me vino al pelo la ayuda ! Habría que ver si existe alguna forma de al ejecutar la macro se puedan ingresar los datos que aparecen en la celda con la URL. Si alguien sabe cante!!

Muchas gracias !


PD: a su vez, necesito que (en el caso de poder hacerlo mediante macros) me baje la tabla en una celda específica de otra hoja en la que estoy posicionado
OpenOffice.org 3.3.0 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para obtener datos web

Mensaje por fornelasa »

Hola, supongo que la tabla que necesitas es la numero 15 de esa pagina, esta macro te la devuelve en la celda activa.
sub datosexternos
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args(2) as new com.sun.star.beans.PropertyValue
args(0).Name = "FileName"
args(0).Value = "http://www.dolarsi.com/cotizaciones_ant ... anio1=2011"
args(1).Name = "FilterName"
args(1).Value = "calc_HTML_WebQuery"
args(2).Name = "Source"
args(2).Value = "HTML_15"
dispatcher.executeDispatch(document, ".uno:InsertExternalDataSource", "", 0, args())
end sub
Ojala sirva, se tarda un poquito pero si lo hace.

Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
guidogulp
Mensajes: 22
Registrado: Lun May 02, 2011 4:19 pm

Re: Macro para obtener datos web

Mensaje por guidogulp »

Fede, muchas gracias !!

Lo que necesito ahora es que

args(0).Value = "http://www.dolarsi.com/cotizaciones_ant ... anio1=2011"

sea el valor de una celda (donde tengo la url que se va modificando)

A su vez, necesito que los datos se ingresen en una celda de otra hoja (no en la hoja activa). Tenes idea como se hace??


De momento lo probe de esta forma pero no funciona:

Código: Seleccionar todo

dim document as object
dim dispatcher as object
dim oUrl as object
dim sUrl as string
dim Hoja as string
dim Celda as string

sUrl = "url"
oUrl = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName( sUrl )
Hoja = "Costos.cotiz"
Celda = "B26"
document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
dim args(2) as new com.sun.star.beans.PropertyValue 
args(0).Name = "FileName" 
args(0).Value = oUrl
args(1).Name = "FilterName" 
args(1).Value = "calc_HTML_WebQuery" 
args(2).Name = "Source" 
args(2).Value = "HTML_19" 
dispatcher.executeDispatch(document, ".uno:InsertExternalDataSource", "", 0, args())
OpenOffice.org 3.3.0 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para obtener datos web

Mensaje por fornelasa »

Hola,
Suponiendo que la URL esta en la celda G1 de la Hoja1 (hoja activa)
Y deseamos la tabla puesta en la Hoja2 celda H1
Y que la tabla es la numero 19
esta macro sería una opcion:
sub datosexternos
'-------------------------------------------------------------------------------------------------------------------------------------
Dim oSheet as Object
dim args(2) as new com.sun.star.beans.PropertyValue
dim cadena as string
dim document as object
dim dispatcher as object
'-------------------------------------------------------------------------------------------------------------------------------------
oSheet = ThisComponent.Sheets.getByName("Hoja2")
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
cadena = thiscomponent.currentcontroller.activesheet.getcellrangebyname("G1").string
'-------------------------------------------------------------------------------------------------------------------------------------
args(0).Name = "FileName"
args(0).Value = cadena
args(1).Name = "FilterName"
args(1).Value = "calc_HTML_WebQuery"
args(2).Name = "Source"
args(2).Value = "HTML_19"
'-------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.CurrentController.select(oSheet.getCellRangeByName("H1"))
dispatcher.executeDispatch(document, ".uno:InsertExternalDataSource", "", 0, args())
'-------------------------------------------------------------------------------------------------------------------------------------
end sub
Saludos, Federico
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
guidogulp
Mensajes: 22
Registrado: Lun May 02, 2011 4:19 pm

Re: Macro para obtener datos web

Mensaje por guidogulp »

Gracias nuevamente Fede, funciona muy bien. Pero ahora voy a poner a prueba tus conocimientos nuevamente! :)

Voy a intentar explicarlo lo mejor posible, así que veamos...

Al necesitar las cotizaciones mes a mes, necesito que los datos que me traiga lo haga en una celda específica respecto del mes que corresponde.
Como te muestro en la imagen "costos.cotiz" (que de hecho es el nombre de la hoja donde van a ir los datos), la 1º celda de cada mes lleva su nombre que en este caso es abril, el resto van a ser mayo, junio, julio, etc. La información traída se debe poner en la celda del mes que corresponde

Para esto, en la imagen "balance.info" podés ver que le puse una fórmula en la celda "sMes" para que me busque el nombre del mes según el número ingresado (abril para el 4, mayo para el 5, y así)

Entonces básicamente la idea es, si ingresan 5 (mayo) que los datos que me trae se pongan en la hoja Costos.Cotiz en la celda con el nombre "mayo"

Espero me hayas entendido!


Como aclaratoria adicional, por las dudas. Donde dice
ThisComponent.CurrentController.select(oSheet.getCellRangeByName("H1"))
en "H1" debería hacer referencia a la celda sMes (en esa celda van a ir variando los meses según lo ingresado (abril, mayo, etc)) y que a su vez me tome el valor de la celda y ponga los datos en la celda con el nombre correspondiente a sMes

Gracias totales
Adjuntos
costos.cotiz.jpg
balance.info.jpg
OpenOffice.org 3.3.0 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para obtener datos web

Mensaje por fornelasa »

Hola, no, no entendí muy bien.

Si en la celda sMes tenemos el valor Mayo, ¿deseas que el programa se meta al internet y traiga la tabla Mayo para colocarla en la hoja "costos.cotiz" en la celda nombrada "Mayo"?

Podrias aclarar un poquito mas la consulta?

Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
guidogulp
Mensajes: 22
Registrado: Lun May 02, 2011 4:19 pm

Re: Macro para obtener datos web

Mensaje por guidogulp »

Con todo gusto. Voy a explicar el funcionamiento de toda la tabla a ver si aclaro un poco :)
Funciona de la siguiente manera:

. Mediante un InputBox pide que ingresen el mes y el año de los datos a traer, luego esto modifica la url que ves abajo de la foto (esta url que depende de los datos ingresados se usa para determinar de que página se van a traer los datos)
. La celda D40 (con nombre sMes) varía según el numero de mes que se ingrese
. A su vez (como se ve en "Costos.Cotiz"), la celda de comienzo de cada mes se nombra con el nombre del mes. B4 se llama abril, B25 (que no se ve en la imagen) se llama mayo, B46 junio y así

Entonces, la idea es que al momento de poner los datos en alguna celda los ponga en la celda que corresponda al mes ingresado: que el macro se fije la celda sMes y diga "ok, entonces pongo los datos en la celda con el nombre determinado en sMes"
Por ejemplo, si ingreso el mes 5, sMes será "mayo" y los datos se tienen que poner en B25 (nombre de celda: "mayo")


Mejor ahora? Creo que con la explicación anterior no me entendía ni yo mismo !
Gracias :)
OpenOffice.org 3.3.0 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para obtener datos web

Mensaje por fornelasa »

Hola,
Te envío archivo anexo a manera de ejemplo. Sugiero bajarlo y guardarlo y despues abrirlo con el programa respectivo.
1) OJO: Al abrirlo te pedirá que si deseas actualizar los vinculos, dile que no.
2) En este archivo tenemos 2 hojas.
3) En la hoja balance.info cambia manualmente los 4 datos de las tablas que deseas importar.
4) Ejecuta la macro

Nota Importante:
Si deseas borrar algun dato de la hoja costos.cotiz deberas hacerlo con Eliminar Contenidos (tecla suprimir) y nunca eliminando filas o columnas ya que puedes borrar los nombres de las celdas Enero, Febrero, Marzo.......Etc.

Cada que cambias los 4 datos y ejecutas la macro, esta te insertará la tabla correspondiente en la hoja costos.cotiz

Como comprenderas ya me estas solicitando todo un desarrollo de programa, sugiero veas este ejemplo y prosigas por tu propia cuenta; y solo en preguntas puntuales solicita la ayuda, con gusto te atenderé en la medida de mis posibilidades.

Espero sea mas o menos lo que estas solicitando.


Saludos.
Adjuntos
DatosExternos222.ods
Traer tablas externas
(11.5 KiB) Descargado 3752 veces
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
guidogulp
Mensajes: 22
Registrado: Lun May 02, 2011 4:19 pm

Re: Macro para obtener datos web

Mensaje por guidogulp »

Fede, la verdad que impecable, me ayudaste sobremanera. A lo que me queda preguntarte, cómo aprendiste todo esto? Hay algún manual específico para que me guíe?

Sé que me he pasado algo de la raya al pedirte TANTA ayuda, pero sinceramente te doy miles de gracias.

PD: me pasás tu dirección y te mando un vino a cambio de toda la ayuda jaja
OpenOffice.org 3.3.0 en Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro para obtener datos web

Mensaje por fornelasa »

Gracias guidogulp por tus palabras, bueno....... me gusta el Ron, jajajajajaja.

Ok, Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Responder