Automatizar teclado con una base de datos en csv

Se que lo que voy a preguntar no es fácil, o al menos para mi que no soy muy experto en el tema. Y voy a hacerlo más difícil aun porque al no entender mucho, no se como explicarlo bien.

Lo que necesito es un programita que me presione determinadas teclas del teclado con algunos nombres y números que están en una base de datos y lo puedo pasar a un csv

Seria algo así:

alt+p ; r ;322350; enter ; enter ; tab ; tab ; tab ; tab ; tab ; tab ;JUAN, PEREZ; enter
alt+p ; r ;321560; enter ; enter ; tab ; tab ; tab ; tab ; tab ; tab ;PEDRO, RODRIGUEZ; enter
alt+p ; r ;354600; enter ; enter ; tab ; tab ; tab ; tab ; tab ; tab ;MARIA, FERNANDEZ; enter
alt+p ; r ;546320; enter ; enter ; tab ; tab ; tab ; tab ; tab ; tab ;ESTEBAN, MOREYRA; enter
alt+p ; r ;320354; enter ; enter ; tab ; tab ; tab ; tab ; tab ; tab ;JOSE, ANSELMO; enter

Esto es para cargar datos en otro programa de código cerrado entonces tengo que cargar los datos de forma manual y son muchísimos y todos los meses, por lo que al ejecutar el programa, tendría que estar abierto y al frente el otro programa donde voy a cargar esos datos. Y además al ser que simula una carga manual, tendría que tener un tiempo entre cada vez que termina de escribir algo (seria entre los punto y coma)

Saludos y desde ya agradecido por cualquier ayuda. Y feliz año nuevo!

Respuesta
2

Pues te doy la razón en algo... no se entendió (casi) nada, jajaja. Pero bueno, dejando la broma de lado, explícalo así:

- Coloca una muestra de al menos tres filas de tu archivo (base de datos) señalando bien que hay en cada columna.

- Trata de simular, bien, como quieres el archivo *. Csv con esas mismas tres filas, y por favor, bien porque no se entiende tu "alt + p" o tu "enter" y queda la duda de si tu "tab" es realmente un "tab" o lo confundes con algún número de espacios determinados (que no es lo mismo).

- Así sean "tab" o espacios (ya nos lo dirás) ¿Por qué están entre los 'puntos y comas'? ¿Así tiene que ser?

- Por cierto, los archivos *. Csv están separados por 'comas' ¿por qué has usado el ¿punto y coma'?

Comentas

Abraham Valencia

Hola, gracias por tu respuesta.

Te comento, todos los meses recibo varios archivos excel con dos columnas "Nro de comprobante" y "Usuario". Uno todos los archivos, imprimo el listado y me siento (como Charles Chaplin en Tiempos Modernos) en frente del monitor y aprieto unas 300 veces:

'alt' 'p' 'r' "Nro de comprobante" 'enter' 'enter' 'tab' 'tab' 'tab' 'tab' 'tab' 'tab' "Usuario" 'enter' 

El 'tab' es tab y no espacio, son 6 veces seguidas que hay que apretarlo. 

Estaba probando algo en python (cosa que poco entiendo) entonces decidí agregarle columnas al excel con las teclas que aprieto y guardarlo como .csv

Con respecto al 'punto y coma' o 'coma' no sabria que decirte, abro el archivo .csv y sale asi, con 'punto y coma'

Saludos

Nuevamente sigues sin explicar bien. Recuerda que tú entiendes lo que escribes pues conoces tus archivo y problemas, toma en cuenta que desde este lado de la pantalla no podemos ver la tuya.

Se entendió que recibes archivos de Excel con dos columnas: Una con números y otra con nombres. Al parecer copias/pegas todos en un solo archivo de ¿Excel? Eso no se entiende ya que además dices que lo imprimes y una vez impreso te sientas frente al monitor a apretar teclas 300 veces, cosa que se entiende menos pues las impresiones son en papel ¿o cuándo dices impreso es que las mandas a algún archivo *.txt?

Entonces no se entiende donde te pones a teclear, menos se entiende, para ti, que es "ALT+P", lo de "Tab" ya quedó (casi) claro pero lo de "Enter" tampoco lo aclaraste.

Insisto, con dos o tres ejemplos (líneas) de cómo tienes los archivos y como deben de quedar sería más fácil ayudarte/entenderte y no olvidar decir en que programa, al menos por ahora, lo estás haciendo.

Por último, si lo haces en Excel directamente cuando todo está ya "pegado", aclara también en que celda presionas cada tecla.

Abraham Valencia

Bueno, perdón siento que lo estoy explicando bien, pero aparentemente no, hago un ultimo intento.

Copio todo en un solo archivo excel, los números y nombres, y lo imprimo solamente porque mi monitor es chico para trabajar en pantalla dividida. Mi única intención es leer esos datos para escribirlos luego.

Así es el archivo:

Yo lo que tengo que hacer es cargar ese numero con ese nombre de usuario en un programa. El resto de las teclas son para acceder a lugares del programa, es decir con 'alt' 'p' entro a la pestaña "Comprobantes", luego 'r' para la sección "Registros" ahí tipieo el numero de comprobante los dos siguientes 'enter' son para darle ingreso a ese numero que escribí, de ahí con el 'tab' me desplazo para cambiarle el nombre, escribo el nombre, y le doy el ok con el ultimo 'enter'.. ese proceso se repite unas 300 veces, donde lo único que cambia es el Numero de Comprobante y el Usuario.

Lo que necesitaría es un script que simule todas las teclas que presiono yo cuando abro el programa del trabajo. Podría hacerlo con algún programa que baje de internet (del tipo autohotkey, o keyboard recorder), pero como no se repite siempre lo mismo, no se como agregarle esa variable al programa. 

Ahora sí se entendió mucho mejor.

Mira, si los datos los tienes, finalmente, en Excel, desde dicho programa podrías usar su entorno de programación en VBA. Dicho programa tiene una función/instrucción que simula el pulsar teclas: SendKeys. Probablemente podría ayudarte. Eso sí, no es un método infalible y dependerá mucho de si el programa que usas, que no mencionaste, finalmente acepta esas "pulsaciones":

https://msdn.microsoft.com/es-es/vba/language-reference-vba/articles/sendkeys-statement 

Asimismo, podrías hacer que los datos del Excel se copien/peguen en los ¿textbox? ¿Formularios? Del programa que mencionas pero claro, todo eso requiere programarlo.

Mira en el mismo enlace que te he enviado, al final, un ejemplo aplicado a la calculadora de Windows.

Abraham Valencia

¡Gracias! El programa no te lo nombre porque es un programa interno de la empresa donde trabajo que no tiene ni nombre y esta en un lenguaje muy viejo, si no me equivoco creo que es cobol. 

Saludos! 

Hola de nuevo! Estuve probando algunas cosas con la información que me diste y llegue a algo, es una avance, pero creo que no me soluciona mi problema, porque del listado que te mostré más arriba tengo que pasar manualmente los números y nombres al macro que escribí.. que es más o menos lo mismo que hacia antes.

Probablemente haya una mejor forma de escribirlo, donde pueda copiar y pegar todo el listado en la macro.

Te muestro a lo que llegue, un ejemplo con los dos primeros de la lista

Sub CrearPdfs()
SendKeys "%{TAB}", True 'Alt+Tab (Cambiar a ventana programa)
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "%", True 'Alt
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "p", True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "r", True 
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "334582", True 'Inserta Nro boleta
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{enter 2}", True 'Abre creator
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{tab 6}", True 'tab 6 veces
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "DE LUCA, SANTIAGO{enter}", True 'Escribe nombre usr y da ok
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "%", True 'Alt
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "p", True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "r", True 
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "334743", True 'Inserta Nro boleta
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{enter 2}", True 'Abre creator
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{tab 6}", True 'tab 6 veces
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "CHARTIER, GUILLERMO ENRIQUE{enter}", True 'Escribe nombre usr y da ok
End Sub

Todos eso para dos usuarios, imagínate que son 300, tal vez me puedas ayudar con una mejor manera de escribirlo.

Saludos y Gracias

El programa que usas ¿admite el copiar/pegar del sistema operativo? Es decir ¿puedes pegar en él con "CTRL+V" lo que copiaste de algún otro lado? En tus explicaciones anteriores mencionabas que digitabas todo y no mencionaste que copiabas/pegabas los datos, entonces da la impresión de que no se puede ero prefiero estar seguro.

Abraham Valencia

Si, admite el copiar/pegar. La verdad es que no lo usaba porque lo de tener el listado en excel es nuevo, antes solo lo tenia en papel y hace poco pedí si me lo podían enviar en excel, así que por costumbre seguí digitando y nunca probé copiar y pegar jaja.

Pues hay que intentar copiar/pegar entonces.

Suponiendo que tus datos están están entre las filas 2 y 300, los códigos en la columna "A" y los nombres en la columna "B":

Sub Buclepega()
Dim x As Long
For x = 2 To 300
SendKeys "%{TAB}", True 'Alt+Tab (Cambiar a ventana programa)
Application.Wait (Now + TimeValue("0:00:1"))
Range("A" & x).Copy
SendKeys "%", True 'Alt
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "p", True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "r", True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "^V", True 'Inserta Nro boleta
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{enter 2}", True 'Abre creator
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{tab 6}", True 'tab 6 veces
Application.Wait (Now + TimeValue("0:00:1"))
Range("B" & x).Copy
SendKeys "^V", , True 'Escribe nombre usr y da ok
Application.Wait (Now + TimeValue("0:00:1"))
Next x
End Sub

La idea es esa, modifica la posición de las pulsaciones ya que yo no tengo como probarlo pero, debería funcionar algo así. Igual la idea es esa: Un bucle.

Abraham Valencia

¡Gracias! Genio! Tome eso ultimo que me mandaste y lo cambie un poco porque no se que pasaba que no andaba el "^V", pero quedo andando! No sabes las horas de trabajo que me ahorraste!

Así quedo:

Sub CrearPdfs()
SendKeys "%{TAB}", True 'Alt+Tab (Cambiar a ventana gas)
Dim x As Long
For x = 2 To 43
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "%", True 'Alt
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "p", True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "r", True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys ActiveSheet.Range("A" & x).Value, True
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{enter 2}", True 'Abre creator
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{tab 6}", True 'tab 6 veces
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys ActiveSheet.Range("B" & x).Value, True 'Escribe nombre usr
Application.Wait (Now + TimeValue("0:00:1"))
SendKeys "{enter}", True 'ok final
Application.Wait (Now + TimeValue("0:00:2"))
Next x
End Sub

Ahora tengo la ultima 'Preguntonta'.. hay una forma de frenarlo sin tener que irme a la ventana del excel? porque recién probandolo quise frenarlo y cuando me fui a la ventana del excel empezó a copiarme las cosas ahí..

Agradecido eternamente! (Te debo un vino mínimamente)

Voy a anotar: Cobrar vino cuando vayas a Argentina, jajajajaj

Para detener un bucle como ese hay, creo, tres modos:

- Usar la tecla "Scape". Si no funciona a la primera, mantenerla presionada y/o presionarla varias veces puede ser la solución.

- Pulsar "Ctrl" junto con "Pausa/descanso". Sigue pulsando esa combinación varias veces si no resulta a la primera.

- Usar el administrador de tareas para "cerrar a la mala"

Salu2

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas