Autor Tema: Graficar en EXCEL  (Leído 6948 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Graficar en EXCEL
« en: 23 de Diciembre de 2006, 21:34:40 »
Hola amigos !  :)

Estoy teniendo un problema con VB6, que no sé como resolverlo.
Tengo funcionando un sistema que posee una memoria EEPROM, donde se almacenan datos.
El circuito posee una interface, con un MAX232 que funciona OK. A los datos los extraigo, del sistema y los leo con un programita en VB6 , los visualizo en un Textbox, y logro guardarlos en un archivo TXT.

Los datos que guardo en el archivo (al abrirlo con el NOTEPAD) se ven de la siguiente forma:

 22 60  23 61  22 62  23 60  22 64  23 61  22 62  ........  y así sucesivamente tengo unos 245 datos (datos más , datos menos) grabados en el TXT. Sin comas, sin separadores, sin nada.

Ahora viene el problema.
Esos datos quiero graficarlos en una Carta Excel.

Tengo un pequeño soft que descargué de Planet Source, que me pasa de un archivo TXT a una carta EXCEL que es una hermosura como funciona.
Permite elegir cualquier archivo TXT de cualquier Drive y hace un gráfico ideal para lo que necesito.

Pero yo quiero integrar todo en un mismo programa, porque yo no voy a usar este dispositivo.
Va a ser usado por una persona, que sólo sabe que tiene hacer doble click en un icono del Escritorio y luego un click en un botón para ver la carta Excel de datos grabados en la EEPROM.
Y tal vez, si se lo hago imprimir, se le complique mucho, pero quisiera intentarlo.

En realidad no me interesa grabar y conservar los datos en TXT.
Salió así porque encontré una aplicación que guarda los datos recibidos por el puerto serie en un TXT y por otro lado encontré una aplicación que genera la carta Excel a partir de un TXT y por eso quise juntarlos y me enredé totalmente.

Les adjunto una imagen de lo que quiero lograr, que es lo que genera el programa que tengo.

Si alguien cree que puede ayudarme, postearía los códigos que tengo, para ver como se puede armar la aplicación.

Desde ya les agradezco al menos, heberme leído.

Saludos y Felices Fiestas !
Mario

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Graficar en EXCEL
« Respuesta #1 en: 23 de Diciembre de 2006, 23:45:53 »
Hola mi amigo como estas... Mira con este codigo puedes generar una grafica sencilla del rango seleccionado yo creo que podrias adaptarlo a tu codigo

la grafica esta en funcion de esta hoja de excel :




y este es el codigo o el macro que puedes usar en VB

Código: [Seleccionar]
Charts.Add
ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("A1:b5")
ActiveChart.Location where:=xlLocationAsNewSheet

y esta es la grafica que genera:



Yo creo que una vez tus datos exportados a excel desde tus textbox con unos for, podriamos hacer que seleccione el rango con la funcion IsEmpty y ahi saque el for y guarde el indice de la celda para las columnas y otro for  para las filas tambien con IsEmpty y cuando no haya dato partiendo del ultimo indice del primer for tacaria todos los datos que guardas.


Ya  depues investigariamos como cabiar el formato de la grafica.

Saludos
« Última modificación: 23 de Diciembre de 2006, 23:48:25 por navaismo »
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Graficar en EXCEL
« Respuesta #2 en: 24 de Diciembre de 2006, 11:40:19 »
Hola Max !

Gracias por estar ahí !  :)

Algo logré ya. Lo estoy terminando de arreglar y lo posteo. Puede ser útil para otros y hasta seguramente se puede mejorar. (No me salvé de los TXT)

Hoy mismo en un ratito libre lo subo. No hice tu propuesta.
Mientras tú me respondías, yo seguía luchando con mis pedacitos de código y logré hacerlo funcionar.

GRACIAS por tu ayuda !

Saludos
Mario

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Graficar en EXCEL
« Respuesta #3 en: 24 de Diciembre de 2006, 16:28:09 »
Que bien Mario que te quedo y aqui seguimos.

Te mando un abrazo a ti y a los tuyos que te la pases Super estas Fiestas y porfa no se pongan muy Beodos :D :D


Saludos Amigo
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Graficar en EXCEL
« Respuesta #4 en: 24 de Diciembre de 2006, 16:36:15 »
Gracias Max !!!   :)

Saludos para vós también y a pasarla lindo !!!

    :x)  FELICIDADES !!!!   :x)
Mario

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Graficar en EXCEL
« Respuesta #5 en: 25 de Diciembre de 2006, 17:49:02 »
Hola Max ! Hola a todos !
Espero que estén pasando una Felíz Navidad junto a todos sus seres queridos.  :x)

Aquí posteo lo que logré hacer funcionar.
Tengo que seguir mejorándolo, como hacer que cada vez que se genere la hoja se guarde el gráfico por si no se imprime en el momento y se quiera imprimir más adelante y no se pierdan esos datos.
Algo así, como que se vaya armando una estadística, de lo que pasó cada día.
Para esto también, colocarle la fecha antes de almacenarlo. En fin, mejoras que irán surgiendo.

Lo importante es haber logrado llevar esos datos del TXT al gráfico en EXCEL.

Acá vá el código:

******************************************************

    Private Sub Command1_Click()

    Dim oXL As Object        ' Excel application
    Dim oBook As Object      ' Excel workbook
    Dim oSheet As Object     ' Excel Worksheet
    Dim oChart As Object     ' Excel Chart
   
    Dim iRow As Integer      ' Index variable for the current Row
    Dim iCol As Integer      ' Index variable for the current Row
    Dim varLinea As Long
   
   
    Const cNumCols = 245      ' Number of points in each Series
    Const cNumRows = 1       ' Number of Series

   
    ReDim aTemp(1 To cNumCols)

   
    'Start Excel and create a new workbook   
   
    Set oXL = CreateObject("Excel.application")
    Set oBook = oXL.Workbooks.Add
    Set oSheet = oBook.Worksheets.Item(1)
   
    ' Insert data into Cells for the  Serie:
    ' a partir de aquí comienza la adaptación
 
 
       Open "demo.txt" For Input As #1        'abro el archivo donde tengo guardados los datos
       For iCol = 1 To 245                           'armo un contador
       Input #1, varLinea                            'meto en la variable varLinea cada dato
       aTemp(iCol) = varLinea                     'paso al ARRAY el valor leído
       Next iCol                                          'incremento el contador y sigo
       Close #1
   
    'vuelvo al programa original
 
    oSheet.Range("A1").Resize(cNumRows, cNumCols).Value = aTemp
   
    'Add a chart object to the first worksheet
   
    Set oChart = oSheet.ChartObjects.Add(0, 0, 600, 400).Chart
    oChart.SetSourceData Source:=oSheet.Range("A1").Resize(cNumRows, cNumCols)

    ' Make Excel Visible:   
    oXL.Visible = True

    oXL.UserControl = True

    End Sub

**********************************************************

Eso es todo.
Obvio que está metido dentro de un Form con un montón de cosas más, pero eso que puse, es lo que hace que pueda sacar los datos del archivo "demo.txt" y los muestre en una gráfica EXCEL, tal como quería en el primer post.

Ahora voy a ir mejorándolo estética y funcionalmente. Espero le sirva a alguien.

Gracias Max por estar siempre !  :)

Saludos
Mario

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Graficar en EXCEL
« Respuesta #6 en: 26 de Diciembre de 2006, 00:34:19 »
Hola Mario, muy bueno el codigo con respecto a lo de guardar puedes usar algo parecido a esto:

1.-        .ActiveWorkbook.SaveAs FileName:=Ruta_Archivo & Nb_Archivo, _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

2.-        Libro.SaveAs FileName:=Ruta_Archivo & Nb_Archivo

y para que no crees un libro cada que guardes podrias crear nuevos Sheets default trae 3 y cada uno lo salvas con sheet.name="nombre" lo cual puedes sustitur por sheet.name=""&DATE para que guarde el sheet con el nombre de la fecha.

Saludos
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Graficar en EXCEL
« Respuesta #7 en: 26 de Diciembre de 2006, 17:55:51 »
Hola Max !
Te cuento que ya lo tengo casi listo al programita, peeeeero ..... (siempre hay un pero, dijo Aitopes)

Al hecho de guardar el gráfico lo resolví de esta forma:

    Set oSheet = oBook.Worksheets.Item

    Hoy = Format(Now, "dd_mm_yyyy")
    oSheet.SaveAs ("C:\Registros\" & Hoy & ".xls")

Que sería el segundo ejemplo que me pasaste, pero estoy teniendo un problema al leer el MSComm.

Con el PIC, cada 10 minutos envío al puerto serie lo siguiente :

SEROUT TX,84, [" ",DEC1 T," ",DEC1 H," "]

En el formulario, entre otras cosas tengo, un textbox y dos labels.

Estoy usando lo siguiente para leer el puerto :

***********************************************************

Private Sub Form_Load()

Dim CommPort As String, Settings As String

Dim BuferEntrada As String

MSComm1.CommPort = 1                'puerto com1
MSComm1.Settings = "9600,n,8,1"     'configuracion del puerto serie
MSComm1.PortOpen = True             'se abre el puerto para que funcione
MSComm1.RThreshold = 1              'cada byte recibido, dispara el evento OnComm

    If MSComm1.CommEvent = comEvReceive Then            'si el puerto comienza a recibir .....
         BuferEntrada = MSComm1.Input                        'en esta variable se almacena lo que entra por el puerto serie
         txtRecibir.Text = txtRecibir.Text & BuferEntrada   'acá "veo" lo que llega del puerto
    End If
   
 **************************************************************************

   
En el textbox, me sale perfecto los dos valores que te comentaba en el primer hilo, pero que en este caso ahora es con punto decimal.
Es decir, me sale bárbaro : 22,3 45,8  22,4 45,7  22,5 45,8  22,4 45,7 .......
Todo bárbaro, cada 10 minutos me larga un par de datos leídos (Ej: 22,3 45,8) y se apilan todos dentro del text box

El problema que tengo, es que quiero separar esos datos y ponerlos cada uno en un label distinto y no me sale.  :5]

Quiero tomarlos del BuferEntrada y siempre me muestra lo último de la transmisión.
En el último ejemplo que puse, me muestra siempre 45,8 el label.
El último código que probé es éste y tampoco me funcionó :

Label8.Caption = Left(Val(BuferEntrada), 4)     'sacar del bufer los 4 caracteres de la izquierda
Label9.Caption = Val(BuferEntrada)                 ' de bronca que ponga todo lo que hay en el bufer

Y nada ..... siempre solo lo último, mientras que el textbox acumula por esta línea

txtRecibir.Text = txtRecibir.Text & BuferEntrada

Entonces acumula y muestra todo perfecto.

He probado con el seteo del MSComm.InputLen y tampoco me funciona.
Al dejarlo si setear debiera guardar todo los caracteres recibidos en el bufer, pero cuando voy a buscarlos ....  :shock: sólo están los últimos.
Es como si se fragmentara lo que envío con el SEROUT.

Voy a seguir investigando y aprendiendo y naturalmente que acepto y deseo, sugerencias y enseñanzas.

Saludos !  :)
Mario

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Graficar en EXCEL
« Respuesta #8 en: 27 de Diciembre de 2006, 01:53:41 »
Hola MArio y no podrias enviar un byte de reconocimiento al programa de VB dentro del serout tal como lo hacemos para la comunicacion RF un NL de newline o NT de new textboxt y lo importante seria meter en el programa un if que cada que le llegue el caracter cadena o lo que decidas enviar meta el valor en el siguiente textbox.

Y una vez llenados ya los usas como quieres. Espero no haber llegado tarde con mi sugerencia como en los 2 post anteriores :mrgreen:

Saludos
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."


 

anything