Leer nombre hojas excel

28/07/2005 - 10:28 por Antonio | Informe spam
Buenas.
Necesito recorrer las hojas que un libro excel para
comprobar su nombre y hacer determinados calculos
dependiendo de la hoja en cuestion. El siguiente codigo
funciona, pero NO FUNCIONA


'Abre el Excel para ejecutar el fichero.
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set book = xl.WorkBooks.open(Server.MapPath("./Temp/")
+ "\" + fichero)

'Abra que buscar primero la hoja por su nombre para
evitar problemas
'ERROR: Indica que no es un objeto de la colección
for each ws in book.worksheets
Response.Write "Nombre de la hoja: " & ws.name & " "
next

Preguntas similare

Leer las respuestas

#6 Antonio
29/07/2005 - 14:16 | Informe spam
Muchas gracias.

Seguiré intentando el tema a ver que pasa.

Salu2


Sí, he hecho la prueba incluso con libros con hojas de


gráficos, de
formularios, incluso de macros y me funciona bien. El


bucle me recorre y me
saca los nombres de las hojas de cálculo. Si no hay


ninguna hoja de cálculo
en el libro la colección worksheets está vacía por lo que


me da un error
depués (Set sheet = book.worksheets(1)) al intentar


acceder a un elemento
que no existe, pero el bucle lo pasa sin problemas.

Yo lo que suelo hacer en estos casos es probarlo desde una


aplicación de
Visual Basic para poder hacer el Excel visible y depurarlo


paso a paso para
detectar el error.

Podría ser también que sea un problema de permisos y el


usuario del IIS no
tenga permisos para iniciar el Excel o para abrir el


libro, aunque supongo
que el error lo daría antes. Podías probar a recorrer


primero la colección
workbooks para asegurarte de que el Excel ha abierto el


archivo
correctamente.

Tienes que tener en cuenta también que cada vez que te da


un error el ASP se
detiene la ejecución por lo que el objeto Excel se queda


en memoria sin
descargarse y con el archivo abierto. Al tratar de abrir


el archivo de nuevo
cuando ya está abierto por otro proceso te puede dar


problemas. Si tienes la
posibilidad abre el Administrador de tareas del servidor y


comprueba si
quedan procesos del Excel sin finalizar.

Un saludo

Pantxo

"Antonio" escribió


en el mensaje
news:01cb01c59421$c271b2b0$
Hola.

Realmente los has probado.
A mi me casca siempre al recorrer la colección

Salu2


Pues no sé, a mi me funciona sin problemas.

"Antonio" escribió


en el mensaje
news:03be01c59370$15702b20$
Perdon, pero lo envié sin terminar de comentar el tema.

'Abre el Excel para ejecutar el fichero.
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set book = xl.WorkBooks.open(Server.MapPath("./Temp/") +
"\" + fichero)
'******************* ERROR AQUÍ ********************
'Abrá que buscar primero la hoja por su nombre para
evitar problemas
'ERROR: Indica que no es un objeto de la colección
for each ws in book.worksheets
Response.Write "Nombre de la hoja: " & ws.name & " "
next
'***************************************************
'Activamos el sheet del fichero Excel.
Set sheet = book.worksheets(1)
sheet.Activate

En la parte donde recorro las hojas me casca, me dice que
no es un elemento de la colección, y necesito saber el
nombre de cada hoja como comentaba.

Mas adelante elimino el objeto excel sin problemas y el
fichero del directorio temporal.


Salu2






A mí me funciona sin problemas.
Algunos apuntes:

xl.Visible=True No puedes hacer visible la aplicación,


recuerda que se está
ejecutando en el servidor.

Server.MapPath("./Temp/") + "\" + fichero Entiendo


que el libro Excel
está en la carpeta Temp dentro de la actual:


Server.MapPath("Temp/" &
fichero)

Asegúrate de salir del Excel al finalizar el proceso, de


otra forma se
quedará arrancado en el servidor:
xl.Quit
Set xl=Nothing

Si puedes darnos más datos quizás podamos ayudarte.

Un saludo

Pantxo

"Antonio" escribió


en el mensaje
news:038201c5934e$53406b30$
Buenas.
Necesito recorrer las hojas que un libro excel para
comprobar su nombre y hacer determinados calculos
dependiendo de la hoja en cuestion. El siguiente codigo
funciona, pero NO FUNCIONA


'Abre el Excel para ejecutar el fichero.
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set book = xl.WorkBooks.open(Server.MapPath("./Temp/")
+ "\" + fichero)

'Abra que buscar primero la hoja por su nombre para
evitar problemas
'ERROR: Indica que no es un objeto de la colección
for each ws in book.worksheets
Response.Write "Nombre de la hoja: " & ws.name & " "
next


.





.





.

Respuesta Responder a este mensaje
#7 smendel
15/09/2005 - 01:00 | Informe spam
si alguién me puede ayudar se lo agradezco :

Tengo el siguiente problema :

leo un archivo excel ... el cuál no se su nombre ni sus hijas ni nada
(puede ser cualquier excel)

al leer la primera columna me detecta el nombre del encabezado de la
columna sin problema

pero el problema es cuándo estoy leyendo el primer registro de la columna
(valor1) ej :
CAMPO_1 CAMPO_2
valor1(numerico) valor2
valor3(char) valor4

me toma el siguiente valor (valor3) como que fuera numérico por lo que me
lee un null.

la forma en que lo leo es la sgte :

dim xl, ws, book

rx=1

Set xl = CreateObject("Excel.Application")
xl.Visible = True

Set book = xl.WorkBooks.open(Server.MapPath("./TEMP/") +
"\excel.xls")

for each ws in book.worksheets
'Response.Write "Nombre de la hoja: " & ws.name & " "

Set rsVac1 = Server.CreateObject("ADODB.Recordset")
rsVac1.ActiveConnection = ConexionBD

'strSQL = "Select * From [" & sHoja & "$]"
strSQL = "Select * From ["&ws.name&"$]"
rsVac1.Open strSQL, ConexionBD

'Nos posicionamos al principio del recordset, por cualquier cosa
rsVac1.MoveFirst
'sacamos el RecordSet a una matriz usando GetRows
matriz_registros = rsVac1.getrows
'Se cierra y se destruye el objeto recordset
rsVac1.Close
Set rsVac1 = Nothing

'Buscamos los máximos de cada dimension
cant_campos = UBound(matriz_registros,1)
cant_registros = UBound(matriz_registros,2)

Set rsVac = Server.CreateObject("ADODB.Recordset")
rsVac.ActiveConnection = ConexionBD

strSQL = "Select * From ["&ws.name&"$]"
'strSQL = "Select * From ["&sHoja&"$]"

rsVac.Open strSQL, ConexionBD
'Nos posicionamos al principio del recordset, por cualquier cosa
rsVac.MoveFirst

Do While Not rsVac.EOF
For fx=0 to cant_campos
Response.write rsVac(fx)
'ESTE REGISTRO ME LO LEE COMO UN NULO
next
rsVac.MoveNext
Loop
End If

rsVac.Close
Set rsVac = Nothing
next

xl.Quit
Set xl=Nothing
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida