Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Abrir fichero excel y borrar algunas filas

153 views
Skip to first unread message

Alan Salazar Romero

unread,
Sep 22, 2008, 10:14:59 PM9/22/08
to
Tengo que abrir un archivo de excel (c:\mis archivos\datos.xls) y eliminarl
las filas del rango (A1:A7). Como podria hacerlo?

Alan Salazar
VB.Net 2008 + SQL 2K Server


SoftJaén

unread,
Sep 23, 2008, 9:56:12 AM9/23/08
to
"Alan Salazar Romero" preguntó:

> Tengo que abrir un archivo de excel (c:\mis archivos\datos.xls) y
> eliminarl las filas del rango (A1:A7). Como podria hacerlo?

Una vez que hayas referenciado en tu proyecto la versión adecuada de la
biblioteca Microsoft Excel Object Library, ejecutarías algo parecido a lo
siguiente:

Dim oApp As Excel.Application ' Objeto Application
Dim oWorkBook As Excel.Workbook ' Libro de trabajo

' Creamos una nueva instancia de Excel
oApp = New Excel.Application

' Abro el libro de trabajo
oWorkBook = oApp.Workbooks.Open("C:\Mis documentos\Libro1.xls")

' Referencio la hoja llamada Hoja4
Dim oSheet As Excel.Worksheet = _
CType(oWorkBook.Sheets("Hoja4"), Excel.Worksheet)

' Eliminamos las filas de la 1 a la 7
oSheet.Range("1:7").Delete()

' Guardamos los cambios
oWorkBook.Save()

' Cierro el libro
oWorkBook.Close()

' Cerramos Excel
oApp.Quit()
oApp = Nothing

' Aunque no se recomienda, obligamos a que se
' lleve a cabo la recolección de elementos
' no utilizados.
GC.Collect()

' Detenemos el proceso actual hasta que finalice
' el método Collect
GC.WaitForPendingFinalizers()

¡Eso es todo!

Un saludo

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.


Ivan

unread,
Sep 23, 2008, 11:25:21 AM9/23/08
to
hola chicos,

disculpad que me meta, pero estaba a punto de enviar una respuesta
'casi' calcada de la de Enrique y me ha llamado la atencion el 'casi',
que si no os importa paso a consultar a Enrique =>

>
>     ' Aunque no se recomienda, obligamos a que se
>     ' lleve a cabo la recolección de elementos
>     ' no utilizados.
>     GC.Collect()
>
>     ' Detenemos el proceso actual hasta que finalice
>     ' el método Collect
>     GC.WaitForPendingFinalizers()
>

a) dado que comentas que no se recomienda, ¿cual es el motivo de
usarlo en este caso?

b)¿ existe algun tipo de procesos en los que convenga particularmente
tirar de GC?

lo dicho, disculpas por la intromision, pero no he usado nunca el
'recolector' y, dado que Excel es otro de mis vicios, creo que no me
vendria mal saber un poco el motivo de usarlo en casos como este.

un saludo
Ivan

SoftJaén

unread,
Sep 23, 2008, 11:57:54 AM9/23/08
to
"Ivan" preguntó:

> a) dado que comentas que no se recomienda, ¿cual es el motivo de
> usarlo en este caso?

Eliminar de la memoria el proceso creado por Excel. O eso creía yo, pero veo
que por mucho que llame al "basurero", el proceso de Excel sigue apareciendo
en el Administrador de tareas de Windows.

Si por casualidad tienes Windows XP instalado en tu equipo, ¿podrías
ejecutar el código para ver si desaparece el proceso Excel del Administrador
de tareas? Tengo instalado Windows Vista Ultimate, y no desaparece el
proceso, y me atrevería a jurar que en Windows XP sí desaparece. :-(

> b)¿ existe algun tipo de procesos en los que convenga particularmente
> tirar de GC?

Pues para el caso que nos ocupa: reclamar la memoria usada por el objeto
Excel.Application.

Generalmente no es necesario llamar expresamente al método «Collect», porque
de ello se encarga el runtime de .net cuando lo estime necesario. Piensa que
una recolección de elementos no utilizados puede llevar su tiempo, por lo
que el rendimiento de la aplicación puede verse afectado.

Si observamos que los objetos creados por la aplicación no se destruyen
completamente, es cuando habría que llamar a dicho método, a fin de reclamar
la mayor cantidad de memoria.

Pero me acabo de dar cuenta que en Windows Vista, no desaparece el proceso
de Excel del Administrador de Tareas. Si tienes Windows XP y deseas realizar
la prueba, te agradecería que me comentases los resultados.

Ivan

unread,
Sep 23, 2008, 3:34:11 PM9/23/08
to
hola Enrique,

lo 1º gracias por tus aclaraciones'

>.... el proceso de Excel sigue apareciendo


> en el Administrador de tareas de Windows.
>
> Si por casualidad tienes Windows XP instalado en tu equipo, ¿podrías
> ejecutar el código para ver si desaparece el proceso Excel del Administrador
> de tareas?

me temo que en xp tampoco desaparece [al menos durante los minutos que
mi impaciencia me ha permitido esperar] hasta que cierras el
formulario (en el caso de mis pruebas)

¿que implicaria esto? ¿que el proceso sigue consumiendo memoria?

me ha parecido que con GC el espacio ocupado se mantiene estable,
mientras que sin el (poniendolo como comentario), el espacio ocupado
oscila ligeramente al menos al principio, y mas bien hacia arriba,
pero ni estoy seguro de que con GC no lo haga ni se si quiere decir
algo. Solo como dato por si acaso te sirve de algo

------------

en cuanto al codigo funciona perfectamente. Solo un apunte para OP por
si no lo supiera:

en mi caso, tras referenciar excel, para los tipos Excel.Application
he tenido que usar la jerarquia completa. Pej =>

Dim oApp As Microsoft.Office.Interop.Excel.Application

aunque en los casos diferentes de Application, se lo puede ahorrar
importando el espacio de nombres [ Microsoft.Office.Interop.Excel ],
pudiendo usar pej. Workbook, WorkSheet, etc, a secas

bueno, solo por si se diera el caso

un saludo y gracias de nuevo
Ivan

PD: y si das con alguna explicacion/solucion del tema de recolector te
agradezco si lo comentas :-)

Geovanny Quirós C.

unread,
Sep 23, 2008, 4:54:08 PM9/23/08
to
Amigos Enrique é Ivan, si me disculpan me apunto en el tema, he realizado
pruebas y di con que falta asiganrle Nothing a oSheet y a oWorkbook y ahí
si se cierra el proceso excel.

el codigo queda así:

Dim oApp As Application
' Dim oApp As Excel.Application ' Objeto Application
Dim oWorkBook As Workbook ' Libro de trabajo

' Creamos una nueva instancia de Excel

oApp = New Application

' Abro el libro de trabajo

oWorkBook = oApp.Workbooks.Open("C:\Libro1.xls")

' Referencio la hoja llamada Hoja4

Dim oSheet As Worksheet = _
CType(oWorkBook.Sheets("Hoja1"), Worksheet)

' Eliminamos las filas de la 1 a la 7
oSheet.Range("1:7").Delete()

' Guardamos los cambios
oWorkBook.Save()

oSheet = Nothing

' Cierro el libro
oWorkBook.Close()
oWorkBook = Nothing

' Cerramos Excel
oApp.Quit()
oApp = Nothing

' Aunque no se recomienda, obligamos a que se
' lleve a cabo la recolección de elementos
' no utilizados.
GC.Collect()

' Detenemos el proceso actual hasta que finalice
' el método Collect
'GC.WaitForPendingFinalizers()

________________

Geovanny Quirós C.
Heredia, Costa Rica


"Ivan" <ivanl...@gmail.com> escribió en el mensaje de
noticias:75ba4554-0c13-4f7d...@m73g2000hsh.googlegroups.com...

Ivan

unread,
Sep 23, 2008, 5:18:18 PM9/23/08
to
hola Geovanny,

>he realizado
> pruebas y di con que falta asiganrle Nothing a oSheet y a oWorkbook  y ahí
> si se cierra el proceso excel.

jodo, habia probado con oWorkBook=Nothing, pero evidentemente se me
escapo el oSheet

efectivamente parece que ahora si va

un saludo y muchas gracias
Ivan

SoftJaén

unread,
Sep 24, 2008, 1:20:45 AM9/24/08
to
"Geovanny Quir�s C." escribi�:

> he realizado pruebas y di con que falta asiganrle Nothing a

> oSheet y a oWorkbook y ah� si se cierra el proceso excel.

Hola, Geovanny:

Por m�s �Nothing� que escriba, no se cierra el proceso de Excel del
Administrador de Tareas, y eso que estoy llamando al m�todo
�ReleaseComObject� de la clase System.Runtime.InteropServices.Marshal.

Digo yo que las pruebas las habr�s efecuado en Windows XP, o por casualidad
las has ejecutado en Windows Vista.

Un saludo

--
Enrique Mart�nez
[MS MVP - VB]

Nota informativa: La informaci�n contenida en este mensaje, as� como el
c�digo fuente incluido en el mismo, se proporciona �COMO EST{, sin
garant�as de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en pr�ctica, utilizar o ejecutar lo recomendado o

SoftJaén

unread,
Sep 24, 2008, 1:33:27 AM9/24/08
to
"Ivan" escribió:

> habia probado con oWorkBook=Nothing, pero evidentemente se me
> escapo el oSheet
>
> efectivamente parece que ahora si va

¿Ejecutado bajo Windows XP o bajo Windows Vista?

El tema de los procesos de las aplicaciones de Microsoft Offices es bastante
conocido, tal y como se explica en el siguiente artículo de la Base del
Conocimiento (en inglés):

Office application does not quit after automation from Visual Studio .NET
client
http://support.microsoft.com/?scid=kb;EN-US;317109

Pero como te indiqué anteriormente, me atrevería a jurar que el código
fuente, tal cual lo indiqué en mi primera respuesta, eliminaba el proceso de
Excel del Administrador de tareas en Windows XP. Pero ahora que me ha dado
por ejecutarlo en Windows Vista Ultimate, observo que no desaparece, aunque
establezca a Nothing el valor de todas las variables objeto declaradas,
llame al método «ReleaseComObject» de la clase
System.Runtime.InteropServices.Marshal, y por último, efectúe una
recolección de elementos no utilizados. No hay manera que desaparezca.

Por eso ya no sé si es un problema con el código fuente de la aplicación o
se debe a un problema con el sistema operativo.

Ivan

unread,
Sep 24, 2008, 5:38:58 AM9/24/08
to
hola Enriqe

> ¿Ejecutado bajo Windows XP o bajo Windows Vista?
>

> Pero como te indiqué anteriormente, me atrevería a jurar que el código
> fuente, tal cual lo indiqué en mi primera respuesta, eliminaba el proceso de
> Excel del Administrador de tareas en Windows XP.

bajo Windows XP [Vista casi ni lo conozco], y tal y como comenta
Geovanny parece que sin el nothing el proceso no desaparece y con este
si.

> Por eso ya no sé si es un problema con el código fuente de la aplicación o
> se debe a un problema con el sistema operativo.

la verdad es que yo no controlo nada, aun mas si me sacas de cuatro
codigos, pero de todas formas voy a indagar un poco a ver si me entero
algo

un saludo
Ivan

SoftJa�n

unread,
Sep 24, 2008, 6:12:38 AM9/24/08
to
"Ivan" escribi�:

> bajo Windows XP

Efectivamente, estaba completamente seguro que el c�digo fuente eliminaba el
proceso de Excel bajo Windows XP, una vez establecido el valor Nothing a
todas las variables objeto declaradas, y llamando en �ltima instancia al
recolector de elementos no utilizados. Pero no ocurre lo mismo si ejecutamos
el mismo c�digo bajo Windows Vista, y no tengo ni la menor idea del motivo
al cual se puede deber. :-(

Gracias por la confirmaci�n.

--
Enrique Mart�nez
[MS MVP - VB]

Nota informativa: La informaci�n contenida en este mensaje, as� como el


c�digo fuente incluido en el mismo, se proporciona �COMO EST{, sin

garant�as de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en pr�ctica, utilizar o ejecutar lo recomendado o

Geovanny Quirós C.

unread,
Sep 24, 2008, 10:10:47 AM9/24/08
to
Hola Enrique,
mis pruebas las he hecho en un Windows XP con VS2008, segun pude
documentarme los objetos de Excel "oApp", "oWorkBook" y "oSheet " deben
ser destruidos para que el recolector pueda eliminar el proceso Excel.

Lamentablemente no tengo un Vista para probar :(

Saludos

________________

Geovanny Quir�s C.
Heredia, Costa Rica


"SoftJa�n" <grupo_n...@softjaen.es> escribi� en el mensaje de
noticias:urlWUVgH...@TK2MSFTNGP03.phx.gbl...

SoftJaén

unread,
Sep 24, 2008, 10:24:58 AM9/24/08
to
"Geovanny Quir�s C." escribi�:

> mis pruebas las he hecho en un Windows XP con VS2008, segun pude

> documentarme los objetos de Excel "oApp", "oWorkBook" y "oSheet "
> deben ser destruidos para que el recolector pueda eliminar el
> proceso Excel.

Si todo eso est� muy bien, pero que el c�digo lo ejecuto bajo Windows Vista,
y nada... El proceso de Excel sigue "vivo y coleando" en el Administrador de
Tareas. :-)

Gracias por la confirmaci�n.

--

Geovanny Quirós C.

unread,
Sep 24, 2008, 11:59:44 AM9/24/08
to
Enrique:
si haces este cambio que pasa?...en mis pruebas igual lo cierra pero en
Vista no s� que pasar�a.


' Cerramos Excel
oApp.UserControl = False
oApp.Quit()
oApp = Nothing

________________

Geovanny Quir�s C.
Heredia, Costa Rica


"SoftJa�n" <grupo_n...@softjaen.es> escribi� en el mensaje de

noticias:OfbAWFlH...@TK2MSFTNGP02.phx.gbl...

SoftJaén

unread,
Sep 24, 2008, 12:11:05 PM9/24/08
to
"Geovanny Quir�s C." pregunt�:

> si haces este cambio que pasa?...en mis pruebas igual lo cierra pero en
> Vista no s� que pasar�a.
>
>
> ' Cerramos Excel
> oApp.UserControl = False
> oApp.Quit()
> oApp = Nothing

Pues no sucede nada: el proceso contin�a apareciendo en el Administrador de
tareas, a pesar de llamar al m�todo �ReleaseComObject� y al recolector de
elementos no utilizados, previo establecimiento del valor Nothing de TODAS
las variables objeto declaradas.

groja...@gmail.com

unread,
Mar 3, 2016, 1:07:38 PM3/3/16
to
Gracias por sus comentarios. gracias a estos pude resolver mi problema con VFP

les dejo la solución:

oExcel = CREATEOBJECT("Excel.Application")
oworkbook = oExcel.workbooks.open("C:\conce\holas.xlsx")
oExcel.visible = .t.
oworkbook.quit()
release oworkbook
oExcel.quit()
release oExcel
0 new messages