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

Agregar un hoja a un libro de excel

15 views
Skip to first unread message

Carlos Veron

unread,
Jan 4, 2010, 5:14:46 PM1/4/10
to
Hola grupo, no encuentro soluci�n a este problema, tengo esta situaci�n, un
tabla de rubros la cual quiero exportarla por medio de automatizaci�n a
Excel. Creo el libro siempre se crea con tres hojas, como tengo mas rubros
necesito agregar hojas pero al final del libro yo tengo este c�digo:

*******Genera planilla excel
LOCAL cErrores, lExcel, oExcel, lnCampos, vrRows, vrCols, lcRango, lcLibro,;
respuesta, nSenal, nRubro, nRubAnt, lnLetra
ThisForm.label3.Caption = 'Exportando listado a Excel'
ThisForm.label3.Visible = .t.
RELEASE oExcel
lnCampos = nReg + 2
STORE SPACE(0) TO lcRango
lcLibro = SYS(5)+CURDIR()+"Planillas\"+ALLTRIM(ThisForm.text3.Value)+".xls"
STORE 0 TO respuesta, vrRows, vrCols, nSenal, nRubro, nRubAnt, lnLetra

* BUSCO UNA SESION DE EXCEL YA ACTIVO
cErrores = ON("ERROR")
ON ERROR lExcel = .F.
oExcel = GETOBJECT(,"excel.application")
ON ERROR &cErrores
IF !TYPE('oExcel')="O" && no estaba activa. preparo una nueva sesion de
excel
oExcel = CREATEOBJECT("Excel.Application")
ELSE
* si existe el archivo y se esta utilizando lo cierro
FOR EACH x IN oExcel.Workbooks
NameFileTMP = x.Name
IF NameFileTMP = "Libro1"
x.close
ENDIF
ENDFOR
ENDIF

* SI EXISTE AL PLANILLA LA BORRO
IF FILE('&lcLibro')
DELETE FILE &lcLibro
ENDIF

oExcel.VISIBLE = .f. && No Visualizo EXcel
oExcel.Workbooks.add && Prepara un nuevo trabajo de excel
vrNumHojas = oExcel.sheets.count() && Cantidad de hojas en el libro
IF vrNumHojas > 1
oExcel.sheets(1).select
ELSE
oWorksheet1 = oExcel.Workshets[1]
oExcel.Worksheets.add(,oWorksheet1,1,)
ENDIF

SELECT rubroscolores
COUNT TO nRubCol
IF nRubCol > 3
oExcel.Sheets.Add
ENDIF
SET ORDER TO tag id_rubcol
GO TOP
DO WHILE EOF() != .t.
oExcel.sheets(rubroscolores.rc_id).select && selecciona la hoja
oExcel.ActiveSheet.name = ALLTRIM(rubroscolores.rc_descripcion) &&
coloco el nombre a la hoja

aca existe mas codigo el que llena la hoja

SELECT rubroscolores
SKIP
ENDDO

el problema es que crea la hoja numero cuatro, pero me la inserta delante
del la hoja 3, esto me produce un
error. Mensaje c�digo de error OLE 0x8002000AB: el �ndice no es valido
c�digo de excepci�n OLE IDispatch 0 de ?: ?.

El error se produce en las l�nea donde selecciono la hoja y despu�s donde
quiero darle un nombre a la hoja.

Si lo prueba con tres rubros funciona bien, el tema esta al crear la hoja
cuatro.

Muchas gracias.

Carlos Veron

Walter R. Ojeda Valiente

unread,
Jan 4, 2010, 7:17:58 PM1/4/10
to
Hola

Lo que yo hago cuando debo exportar datos a Excel es crear un planilla
modelo, donde coloco todos los datos que son fijos (bordes, sombreados,
colores, fuentes, tama�os de fuentes, t�tulos, p�ginas, etc.)

Ejemplo:

NombrePlanilla = "PRUEBA.XLS"

COPY FILE ModeloLibroDiario.XLS to &NombrePlanilla

Y a partir de ese momento, trabajo con la planilla destino, la planilla
Modelo ya no la uso, porque �sta siempre debe tener las celdas de datos en
blanco.

En la planilla ModeloLibroDiario.XLS se encuentran todos los datos que son
fijos, que no cambiar�n. Eso me sirve para dos cosas:
1. Para ver como ser� la planilla final, la planilla que ver� el usuario
2. Para que desde mi programa solamente se escriban los datos variables,
ahorr�ndome as� muchas l�neas de c�digo.

Para tu caso, si sabes que la planilla necesitar� de 4 p�ginas pues entonces
a la planilla Modelo correspondiente le colocas 4 p�ginas y ya est�. Cuando
la copies a &NombrePlanilla se copiar�n las 4 p�ginas.

Recuerda que en la planilla Modelo no se escriben datos, todos los datos se
escriben en &NombrePlanilla.

Saludos.

Walter.


JorViv

unread,
Jan 7, 2010, 11:15:26 AM1/7/10
to
Carlos:
Hice una pequeña prueba con este còdigo y funcionò... (VFP6)

tmpsheet = GetObject('','excel.sheet')
XLApp = tmpsheet.application
WITH XLApp
.workbooks.OPEN("c:\prueba.xls") && Libro con tres hojas
.Worksheets(3).Activate && activo la ùltima hoja
.Worksheets().add(,.ActiveSheet ) && ojo, la coma despues del ( y
antes del .Active es la que inserta hoja al final
.sheets(4).Name = "Pepe" && seleciono la ùltima y le pongo el nombre
que quiero
.Visible = .t. && Aplicacion visible
ENDWITH

Lo deduje de una respuesta en este foro, en el 2006, de Luis Maria.
Mediante prueba y error.
Asi mismo agradeceria que LM, ejemplificara la sintaxis completa de
los parametros del metodo Add ( a mi no me quedan muy claros..)
Espero que sea lo que buscas...
Saludos y adjunto la fuente...

*!* loXls = CREATEOBJECT("Excel.Application")
*!* loXls.Visible = .T.
*!* loXls.Workbooks.Add
*!* loXls.Worksheets.Add(,loXls.ActiveSheet)
*!* ...
*!* ...
*!* Para insertar Antes de la hoja activa
*!* loXls.Worksheets.Add(loXls.ActiveSheet)
*!* Los parámetros u el orden del método Add son
*!* Add(Before, After, Count, Type)
*!* --
*!* Luis María Guayán
*!* Tucumán, Argentina

0 new messages