Manipular excel desde lisp
5 participantes
Página 1 de 1.
Manipular excel desde lisp
Buen día foro. Luego de un poco mas de un año de ausencia, regreso a la querencia. Como han de imaginar, un poco oxidado de lo casi nada que sabía, pero en fin. El hecho es que regreso con una situación un tanto común en excel, seguro que a mas de uno le paso.
El problema es que tengo algunas hojas d excel con datos formato, bordes, etc. Estoy limpiando la hoja para poder ser leída desde un lisp, pero.... quedan muchos renglones en blanco. Son varios archivos, con mas de 900 renglones cada uno. Si alguien sabe como resolver esto, con lisp, con algun macro, con lo que sea.... agradeceré mucho me ayuden.
Saludos y gracias..............
El problema es que tengo algunas hojas d excel con datos formato, bordes, etc. Estoy limpiando la hoja para poder ser leída desde un lisp, pero.... quedan muchos renglones en blanco. Son varios archivos, con mas de 900 renglones cada uno. Si alguien sabe como resolver esto, con lisp, con algun macro, con lo que sea.... agradeceré mucho me ayuden.
Saludos y gracias..............
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
No entiendo. ¿tú qué quieres exactamente, quitar las líneas en blanco? Eso lo puedes hacer desde excel, con filtro.
Re: Manipular excel desde lisp
Elias, en el supuesto que tuvieras una hoja en excel con estos valores
- Código:
"safdsf" nil nil nil nil nil nil nil nil
nil nil nil "fds" nil nil nil nil nil
nil nil "f" nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil "fs" nil nil nil "ds"
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil "ds" nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil "f" nil
nil nil nil nil nil nil nil nil nil
nil "fasf" nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil nil nil nil "f" nil nil nil
nil nil nil nil nil nil nil nil nil
nil nil "fas" nil nil nil nil nil nil
nil nil nil nil nil "f" nil nil nil
- Código:
;;;Uso:
;;;(EliminaFilasVacias Lst)
(DEFUN EliminaFilasVacias (lst / CT LSTDEEXCEL LSTFILASCONDATOS LSTFILASVACIAS X)
(FOREACH itm lst
(IF (NOT (VL-EVERY '(LAMBDA (x)
(NOT x)
)
itm
)
)
(SETQ LstFilasConDatos (CONS itm LstFilasConDatos))
)
)
(SETQ LstFilasConDatos (REVERSE LstFilasConDatos))
)
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: Manipular excel desde lisp
O si lst es una lista:
Un saludo
- Código:
(vl-remove nil lst)
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
Primero que nada una disculpa por tardar en contestar...
Luego, Marco no son celdas vacías lo que necesito eliminar, son los renglones... ya que de renglón a renglón cambia el número de datos...
Voy a intentar con la opción que me da nolo, a ver como me va.
Saludos y gracias
Luego, Marco no son celdas vacías lo que necesito eliminar, son los renglones... ya que de renglón a renglón cambia el número de datos...
Voy a intentar con la opción que me da nolo, a ver como me va.
Saludos y gracias
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
Para que se vean lo que en realidad necesito. En el archivo anexo, llevo eliminados "a mano" hasta el renglón 1,010.... debe ser hasta el 3233....
https://www.dropbox.com/sh/uolzx214csq0sn9/AAB0lNSgm1ehn3d34soV839Za?dl=0
https://www.dropbox.com/sh/uolzx214csq0sn9/AAB0lNSgm1ehn3d34soV839Za?dl=0
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
Pues creo que necesitas es la opción de nolo, yo supuse que obtenías los valores desde una hoja de excel, de ahí la solución que planteaba
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: Manipular excel desde lisp
Si Marco, yo también creí eso. Pero al convertir el CSV en lista, me di cuenta que no existen renglones nil.... todos tienen valores ("" "" "" ""...."") no son nil.... creo que no me queda mas que seguir "a mano"
Saludos y gracias........
PD: A menos que haya otra forma de leer el CVS.... ustedes dirán
Saludos y gracias........
PD: A menos que haya otra forma de leer el CVS.... ustedes dirán
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
si en el codigo que te puse, cambias (NOT x) por (/= x "") debe funcionar, en una chance lo reviso para verificar si es cierto.
Marco Jacinto- Mensajes : 91
Fecha de inscripción : 12/08/2016
Re: Manipular excel desde lisp
..... no funcionó.... a seguir pedaleando... gracias
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
Mira Marco... y foro, me encontré este truco que me sirvió de maravilla. Aquí se los dejo:
SELECCIONAR FILAS. ...
Ir a Cinta de Opciones / Pestaña: Inicio / Grupo: Modificar / Buscar y seleccionar / Ir a Especial. ...
Activar la opción: Celdas en blanco. ...
Pulsar el botón Aceptar. ...
ELIMINAR FILAS.
Gracias.........
SELECCIONAR FILAS. ...
Ir a Cinta de Opciones / Pestaña: Inicio / Grupo: Modificar / Buscar y seleccionar / Ir a Especial. ...
Activar la opción: Celdas en blanco. ...
Pulsar el botón Aceptar. ...
ELIMINAR FILAS.
Gracias.........
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: Manipular excel desde lisp
La ultima opcion es realmente simple y efectiva,
Pero si lo quieres manipular mediante una rutina en vba
la adjunto
Mediante esta rutina no tendras necesidad de hacerlo hoja por hoja
Sub elimina_renglones_en_blanco()
'Esta rutina elimina los renglones en blanco de todas las hojas del libro, comparando celdas en la columna 1
'Si quieres comparar las celdas en blanco de otra cololumna en el condicionante
' ThisWorkbook.Sheets(Hoja.Name).Cells(renglon, 1) = ""
' lo cambiarias por
' ThisWorkbook.Sheets(Hoja.Name).Cells(renglon, numero_de_columna_deseado) = ""
Time1 = Time
For Each Hoja In Worksheets
renglon_termina = 0
renglon_final = Worksheets(Hoja.Name).Cells(Rows.Count, 1).End(xlUp).Row
If Hoja.Name <> "2016 Agosto" And Hoja.Name <> año & "2016 Septiembre" Then
For renglon = 1 To renglon_final
If ThisWorkbook.Sheets(Hoja.Name).Cells(renglon, 1) = "" Then
ThisWorkbook.Sheets(Hoja.Name).Rows(renglon).Delete
renglon = renglon - 1
renglon_termina = renglon_termina + 1
If renglon_termina = renglon_final Then renglon = renglon_final
End If
Next
End If
Next
Time2 = Time
tiempo_de_ejecution = Time2 - Time1
Worksheets("2016 Agosto").Cells(1, 10) = "Hora de inicio"
Worksheets("2016 Agosto").Cells(2, 10) = "Hora Final"
Worksheets("2016 Agosto").Cells(3, 10) = "Tiempo ejecucion"
Worksheets("2016 Agosto").Cells(1, 11) = Time1
Worksheets("2016 Agosto").Cells(2, 11) = Time2
Worksheets("2016 Agosto").Cells(3, 11) = tiempo_de_ejecution
End Sub
Pero si lo quieres manipular mediante una rutina en vba
la adjunto
Mediante esta rutina no tendras necesidad de hacerlo hoja por hoja
Sub elimina_renglones_en_blanco()
'Esta rutina elimina los renglones en blanco de todas las hojas del libro, comparando celdas en la columna 1
'Si quieres comparar las celdas en blanco de otra cololumna en el condicionante
' ThisWorkbook.Sheets(Hoja.Name).Cells(renglon, 1) = ""
' lo cambiarias por
' ThisWorkbook.Sheets(Hoja.Name).Cells(renglon, numero_de_columna_deseado) = ""
Time1 = Time
For Each Hoja In Worksheets
renglon_termina = 0
renglon_final = Worksheets(Hoja.Name).Cells(Rows.Count, 1).End(xlUp).Row
If Hoja.Name <> "2016 Agosto" And Hoja.Name <> año & "2016 Septiembre" Then
For renglon = 1 To renglon_final
If ThisWorkbook.Sheets(Hoja.Name).Cells(renglon, 1) = "" Then
ThisWorkbook.Sheets(Hoja.Name).Rows(renglon).Delete
renglon = renglon - 1
renglon_termina = renglon_termina + 1
If renglon_termina = renglon_final Then renglon = renglon_final
End If
Next
End If
Next
Time2 = Time
tiempo_de_ejecution = Time2 - Time1
Worksheets("2016 Agosto").Cells(1, 10) = "Hora de inicio"
Worksheets("2016 Agosto").Cells(2, 10) = "Hora Final"
Worksheets("2016 Agosto").Cells(3, 10) = "Tiempo ejecucion"
Worksheets("2016 Agosto").Cells(1, 11) = Time1
Worksheets("2016 Agosto").Cells(2, 11) = Time2
Worksheets("2016 Agosto").Cells(3, 11) = tiempo_de_ejecution
End Sub
enrique calderon- Mensajes : 12
Fecha de inscripción : 25/01/2017
Temas similares
» Reemplazar texto desde tabla de excel
» ¿se puede ingresar un valor al comando getreal desde excel?
» Plot desde Lisp
» Abrir un archivo *.dwg desde lisp Y CONTINUAR RUTINA EN HOJA NUEVA
» Trabajo en Excel
» ¿se puede ingresar un valor al comando getreal desde excel?
» Plot desde Lisp
» Abrir un archivo *.dwg desde lisp Y CONTINUAR RUTINA EN HOJA NUEVA
» Trabajo en Excel
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|