Page 1 of 1
Agregar hoja Excel OLE
Posted: Fri Nov 19, 2021 12:00 am
by jparada
Estoy intentado agregar varias hojas a un libro de Excel,
Code: Select all
If ( oExcel := win_oleCreateObject( 'Excel.Application' ) ) == Nil
? 'Excel no disponible, ', win_OleErrorText()
Return Nil
Endif
oExcel:WorkBooks:Add()
oSheet := oExcel:ActiveSheet()
/* Rename Sheet Tab */
oSheet:Name := "Hoja1"
oSheet:Cells( 1, 1 ):Value := "Hoja1 - fila 1"
oSheet:Cells( 2, 1 ):Value := "Hoja1 - fila 2"
/* Add Sheet Tab */
//oExcel:Sheets:Add( ,oExcel:Sheets(1) )
oExcel:Sheets:Add( )
oSheet := oExcel:ActiveSheet()
oSheet:Name := "Hoja2"
oSheet:Cells( 1, 1 ):Value := "Hoja2 - fila1"
oSheet:Cells( 2, 1 ):Value := "Hoja2 - fila2"
/* Save as */
oExcel:ActiveWorkbook:SaveAs( "name.xls" )
oExcel:Visible := .T.
Esto funciona, pero la hoja2 se posiciona antes de la hoja1 y no es lo que requiero.
He leído en algunos foros y la mayoría coinciden en que se debe realizar algo así:
you must add SHEETS

not Workbooks
oExcel.Sheets.Add()
If you want to add this sheet AFTER some other sheet:
oExcel.Sheets.Add(,oExcel.Sheets("Sheet1"))
Pero al hacerlo de esa forma me despliega error.
Alguien sabe cómo puedo insertar hojas en orden específico.
Saludos,
Javier
Re: Agregar hoja Excel OLE
Posted: Fri Nov 19, 2021 12:47 am
by AUGE_OHR
hi,
using Office 97 default are 3 x Work-Sheets so i must "delete" two of it
Code: Select all
// Office 97 Excel creates 3 worksheets by default
// Delete 2 of them
oExcel:Application:Worksheets(3):delete()
oExcel:Application:Worksheets(2):delete()
on newer Version i do start from scratch
Code: Select all
// Create a workbook from scratch
oExcel:Application:Workbooks:new()
oExcel:Application:Workbooks:add()
i guess last line is what you looking for
Re: Agregar hoja Excel OLE
Posted: Fri Nov 19, 2021 1:12 am
by andyglezl
Esto funciona, pero la hoja2 se posiciona antes de la hoja1 y no es lo que requiero.
Si es por el orden en que se crean, porque no empiezas a crear por la última (3,2,1)...
Re: Agregar hoja Excel OLE
Posted: Fri Nov 19, 2021 2:43 pm
by jparada
AUGE_OHR wrote: ↑Fri Nov 19, 2021 12:47 am
hi,
Code: Select all
// Create a workbook from scratch
oExcel:Application:Workbooks:new()
oExcel:Application:Workbooks:add()
i guess last line is what you looking for
Ya había leído algo parecido, pero esa línea crea libros, o sea archivos de Excel por separado, no hojas dentro del mismo libro.
Re: Agregar hoja Excel OLE
Posted: Fri Nov 19, 2021 10:01 pm
by jparada
andyglezl wrote: ↑Fri Nov 19, 2021 1:12 am
Si es por el orden en que se crean, porque no empiezas a crear por la última (3,2,1)...
Jajaja, pues va a ser que voy a tener que hacer eso, quería controlarlo de manera correcto, es decir, indicando yo el orden; Pero mientras sigo investigando... lo raro es que ya corrí un ejemplo en VFP y funciona perfecto con:
Code: Select all
loExcel.Worksheets.Add(,loExcel.ActiveSheet)
pero si pongo esa línea al menos en mi caso, tira error...
Saludos.
Re: Agregar hoja Excel OLE
Posted: Sat Nov 20, 2021 12:44 am
by andyglezl
Quizá así...
oExcel.Sheets.Add(,oExcel.Sheets("Sheet1"))
oExcel.Sheets.Add(,oExcel.Sheets("Sheet2"))
oExcel.Sheets.Add(,oExcel.Sheets("Sheet3"))
o
objSheet1 := objExcel.ActiveWorkbook.Worksheets(1)
objSheet2 := objExcel.ActiveWorkbook.Worksheets(2)
objSheet3 := objExcel.ActiveWorkbook.Worksheets(3)
*--------------------------------------------------------------------
objSheet1:Cells( 1, 1 ):Value := "Hoja1 - fila 1"
objSheet1:Cells( 2, 1 ):Value := "Hoja1 - fila 2"
*--------------------------------------------------------------------
objSheet2:Cells( 1, 1 ):Value := "Hoja2 - fila 1"
objSheet2:Cells( 2, 1 ):Value := "Hoja2 - fila 2"
*--------------------------------------------------------------------
objSheet3:Cells( 1, 1 ):Value := "Hoja3 - fila 1"
objSheet3:Cells( 2, 1 ):Value := "Hoja3 - fila 2"
Re: Agregar hoja Excel OLE
Posted: Sat Nov 20, 2021 2:35 pm
by jparada
andyglezl wrote: ↑Sat Nov 20, 2021 12:44 am
Quizá así...
oExcel.Sheets.Add(,oExcel.Sheets("Sheet1"))
oExcel.Sheets.Add(,oExcel.Sheets("Sheet2"))
oExcel.Sheets.Add(,oExcel.Sheets("Sheet3"))
o
objSheet1 := objExcel.ActiveWorkbook.Worksheets(1)
objSheet2 := objExcel.ActiveWorkbook.Worksheets(2)
objSheet3 := objExcel.ActiveWorkbook.Worksheets(3)
*--------------------------------------------------------------------
objSheet1:Cells( 1, 1 ):Value := "Hoja1 - fila 1"
objSheet1:Cells( 2, 1 ):Value := "Hoja1 - fila 2"
*--------------------------------------------------------------------
objSheet2:Cells( 1, 1 ):Value := "Hoja2 - fila 1"
objSheet2:Cells( 2, 1 ):Value := "Hoja2 - fila 2"
*--------------------------------------------------------------------
objSheet3:Cells( 1, 1 ):Value := "Hoja3 - fila 1"
objSheet3:Cells( 2, 1 ):Value := "Hoja3 - fila 2"
Lo intento este fin de semana, gracias.
Re: Agregar hoja Excel OLE
Posted: Thu Nov 25, 2021 9:43 am
by Tiger
May be you can try .....
ADD SHEET
oExcel:Sheets:Add:Name:=oSheet:range("a3"):value() //add a Sheet before the ActiveSheet
oExcel:Worksheets:Add(after:=oExcel:Worksheets("Sheet5")):Name:="NewSheet"
oExcel:Worksheets:Add(before:=oExcel:Worksheets("Sheet5")):Name:=oSheet:range("a3"):value()
oExcel:sheets():Add(after:=oExcel:sheets("Chart2")):Name:="NewSheet" // sheets() CAN BE USED WITH "CHART" OR "SHEET"