Page 1 of 1

tExcel 2003 o 2007

Posted: Tue Apr 05, 2011 7:48 am
by colthop
Hola a todos:

Paso a comentaros un problema por si alguien sabe la solución. Tengo varias aplicaciones que hacen hojas Excel y funcionan correctamente, pero cuando esta instalado el Office 2007 sigue creandolas bien pero en formato XLSX en vez de XLS aunque yo ponga la extension XLS, mi pregunta es la siguiente:

¿ Alguien sabe como forzar a que se grabe en formato 2003 o XLS en vez de 2007 o XLSX cuando se utiliza la clase tExcel ?

Un saludo

Carlos

Re: tExcel 2003 o 2007

Posted: Tue Apr 05, 2011 8:37 am
by colthop
Hola de nuevo se me olvido deciros que si alguien sabe donde puedo ver todas las opciones de la clase tExcel me lo podria comunicar, gracias.

Re: tExcel 2003 o 2007

Posted: Tue Apr 05, 2011 11:54 am
by MarioG

Re: tExcel 2003 o 2007

Posted: Wed Apr 06, 2011 8:10 am
by Sebastián Almirón
Si quieres guardar un libro en un formato o versión diferente del de la versión Excel que tengas instalada, deberás utilizar el método SaveAs en lugar del método Save.

No se como utilizas Excel, pero sería algo así:

oExcel:ActiveWorkBook:SaveAs('nombre del fichero',numero de formato) // numero de formato = 43 para formato Excel 97

Busca en Excel la propiedad xlFileformat para ver los distintos formatos en los que se puede guardar.

Eso no evitará que si quien se encarga de guardar el libro es el usuario, por defecto se siga guardando en formato 2007.
Para evitarlo, hay que modificar en excel la forma en que se guandan los libros Excel:
En Excel 2007, botón de Excel -> Opciones de Excel -> Guardar -> Guardar archivos en formato: Libro Excel 97-2003

Saludos

Re: tExcel 2003 o 2007

Posted: Wed Apr 06, 2011 12:18 pm
by colthop
Hola a Todos y en especial a Sebastian y Mario:

He intentado lo que me poneis y grabando con WorkBook:SaveAs(`'Nombre de Fichero',43) o oExcel:ActiveWorkBook:SaveAs(`'Nombre de Fichero',43) y tambien de multiples formas pero siempre me da un mensaje o parecido:

Error Excel.Application:ACTIVEWORKBOOK/3 DISP_E_MEMBERNOTFOUND: SAVEAS

Y de hay no salgo ponga lo que ponga.

Si me podeis ayudar gracias

Carlos

Re: tExcel 2003 o 2007

Posted: Wed Apr 06, 2011 12:34 pm
by acuellar
Carlos

De esta forma siempre guarda en .XLS 97-2003

Code: Select all

  oExcel:=CreateObject( "excel.application" )
  oExcel:DisplayAlerts=.F.
  oBook:=oExcel:Workbooks:Add() 
  oSheet:=oExcel:ActiveSheet 
   oSheet:Range( "A1" ):Value ="TITULO DE LA PLANILLA"
   oSheet:Range( "A1:D1" ):HorizontalAlignment := xlHAlignCenterAcrossSelection //Centra el titulo
   oBook:SaveAs( "C:\PLANILLA.XLS" )
   oExcel:Visible = .T. //Abre la planilla
 
Saludos,

Adhemar

Re: tExcel 2003 o 2007

Posted: Wed Apr 06, 2011 2:21 pm
by Sebastián Almirón
Si no lo consigues, pega un trozo del código a ver que pasa.

Me da la sensación de que ese error es porque aun no tienes ningún libro creado o abierto.

Re: tExcel 2003 o 2007

Posted: Thu Apr 07, 2011 6:02 am
by colthop
Hola de nuevo:

He intentado lo que me has puesto y lo unico que ha hecho es no poner el mensaje de error pero el formatosigue siendo XLSX con extensión XLS. Aqui os pongo como hago el archivo:

Code: Select all

SELECT 51

oExcel1 := TOleAuto():New( "Excel.Application" )
oWorkBook:=oExcel1:WorkBooks:Add()
oHoja1 := oExcel1:Get( "ActiveSheet" )
oHoja1:Cells:Font:Name := "Arial"
oHoja1:Cells:Font:Size := 10
oHoja1:Cells(1, 1):Font:Bold := .T.
oHoja1:Cells(1, 1):Value := "FIRMA_NUM_REG"
oHoja1:Cells(1, 2):Font:Bold := .T.
oHoja1:Cells(1, 2):Value := "SEGMENTO"
oHoja1:Cells(1, 3):Font:Bold := .T.
if opc = 1
  oHoja1:Cells(1, 3):Value := "PERIODO"
else
  oHoja1:Cells(1, 3):Value := "AÑO"
endif
oHoja1:Cells(1, 4):Font:Bold := .T.
oHoja1:Cells(1, 4):Value := "CCAA"
oHoja1:Cells(1, 5):Font:Bold := .T.
oHoja1:Cells(1, 5):Value := "VENG95SPB"
oHoja1:Cells(1, 6):Font:Bold := .T.
oHoja1:Cells(1, 6):Value := "VENG97CPB"
oHoja1:Cells(1, 7):Font:Bold := .T.
oHoja1:Cells(1, 7):Value := "VENG98SPB"
oHoja1:Cells(1, 8):Font:Bold := .T.
oHoja1:Cells(1, 8):Value := "VENGOA"
oHoja1:Cells(1, 9):Font:Bold := .T.
oHoja1:Cells(1, 9):Value := "VENNGO"
oHoja1:Cells(1,10):Font:Bold := .T.
oHoja1:Cells(1,10):Value := "VENGOB"
oHoja1:Cells(1,11):Font:Bold := .T.
oHoja1:Cells(1,11):Value := "VENP_S_I_GOB"
oHoja1:Cells(1,12):Font:Bold := .T.
oHoja1:Cells(1,12):Value := "VENGOC"
oHoja1:Cells(1,13):Font:Bold := .T.
oHoja1:Cells(1,13):Value := "VOL_GOC_UE"
oHoja1:Cells(1,14):Font:Bold := .T.
oHoja1:Cells(1,14):Value := "VENBIOD"
oHoja1:Cells(1,15):Font:Bold := .T.
oHoja1:Cells(1,15):Value := "VENP_S_I_FOB"
oHoja1:Cells(1,16):Font:Bold := .T.
oHoja1:Cells(1,16):Value := "VENPIEVM_FOB"
oHoja1:Cells(1,17):Font:Bold := .T.
oHoja1:Cells(1,17):Value := "CNT_FOB_UE"
oHoja1:Cells(1,18):Font:Bold := .T.
oHoja1:Cells(1,18):Value := "VENP_S_I_FOE"
oHoja1:Cells(1,19):Font:Bold := .T.
oHoja1:Cells(1,19):Value := "VENPIEVM_FOE"
oCol = 2
do while .T.
  if eof()
    exit
  endif
  oHoja1:Cells(oCol, 1):Value := VDTMA2->firma
  oHoja1:Cells(oCol, 2):Value := VDTMA2->segmento
  if opc = 1
    oHoja1:Cells(oCol, 3):Value := VDTMA2->periodo
  else
    oHoja1:Cells(oCol, 3):Value := VDTMA2->ano
  endif
  oHoja1:Cells(oCol, 4):Value := VDTMA2->ccaa
  if veng95spb > 0.000
    oHoja1:Cells(oCol, 5):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol, 5):Value := VDTMA2->veng95spb
  endif
  if veng97cpb > 0.000
    oHoja1:Cells(oCol, 6):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol, 6):Value := VDTMA2->veng97cpb
  endif
  if veng98spb > 0.000
    oHoja1:Cells(oCol, 7):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol, 7):Value := VDTMA2->veng98spb
  endif
  if vengoa    > 0.000
    oHoja1:Cells(oCol, 8):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol, 8):Value := VDTMA2->vengoa
  endif
  if venngo    > 0.000
    oHoja1:Cells(oCol, 9):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol, 9):Value := VDTMA2->venngo
  endif
  if vengob    > 0.000
    oHoja1:Cells(oCol,10):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,10):Value := VDTMA2->vengob
  endif
  if venpsigob > 0.000
    oHoja1:Cells(oCol,11):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,11):Value := VDTMA2->venpsigob
  endif
  if vengoc    > 0.000
    oHoja1:Cells(oCol,12):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,12):Value := VDTMA2->vengoc
  endif
  if vol_goc_ue> 0.000
    oHoja1:Cells(oCol,13):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,13):Value := VDTMA2->vol_goc_ue
  endif
  if venbiod   > 0.000
    oHoja1:Cells(oCol,14):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,14):Value := VDTMA2->venbiod
  endif
  if venpsifob > 0.000
    oHoja1:Cells(oCol,15):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,15):Value := VDTMA2->venpsifob
  endif
  if venpievmfo> 0.000
    oHoja1:Cells(oCol,16):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,16):Value := VDTMA2->venpievmfo
  endif
  if cnt_fob_ue> 0.000
    oHoja1:Cells(oCol,17):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,17):Value := VDTMA2->cnt_fob_ue
  endif
  if venpsifoe > 0.000
    oHoja1:Cells(oCol,18):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,18):Value := VDTMA2->venpsifoe
  endif
  if venpievfoe> 0.000
    oHoja1:Cells(oCol,19):Set( "NumberFormat", "#.##0,000" )
    oHoja1:Cells(oCol,19):Value := VDTMA2->venpievfoe
  endif
  oCol = oCol + 1
  skip + 1
enddo
oHoja1:=NIL

* oWorkBook:SaveAs(xfich2,43)

oWorkBook:SaveAs(xfich2)

* oExcel1:ActiveWorkBook:SaveAs(xfich2,43)

oExcel1:quit()
oExcel1:=NIL
Si podeis ayudarme .

Un saludo

Carlos

Re: tExcel 2003 o 2007

Posted: Thu Apr 07, 2011 10:35 am
by anserkk
The 2nd Parameter in SaveAs ie 43 will give you the above said error.

Try 56 instead of 43

Code: Select all

oExcel1:ActiveWorkBook:SaveAs("MyFile2003Version",56)  // xlExcel8 (97-2003 format in Excel 2007, .xls)
Regards
Anser

Re: tExcel 2003 o 2007 (SOLUCIONADO)

Posted: Fri Apr 08, 2011 6:14 am
by colthop
Hola a todos:

Es para dar las gracias a Anser ya que su post me ha solucionado el problema.

Un saludo

Carlos