RE:Problema al exportar a excel
Yo utilizo el siguiente codigo para enviar un pedido de mi cliente a excel y asi pueda modificarlo a su gusto, la idea es clara y el codigo esta lo suficientemente comentado segun mi propio gusto.
Lo que hace es abrir excel y crea un libro nuevo, y comienza a llenar las celdas con los datos de los registros basandose en un cursor pero que bien puede ser un tabla dbf.
espero te quede claro y sea lo que requerias.
*!* Envia los documentos a excel
*!* Autor: Vicor Hugo Navarrete N.
IF Thisform.chkSoloProductoCant.Value = 0
local Fila && Prepara la hoja de excel
wait'Espere Un Momento Exportando Datos' window nowait
_screen.mousepointer=14
TmpSheet=GetObject('','Excel.Sheet')
XLApp=TmpSheet.Application
XLApp.visible=.T.
XLApp.workbooks.add()
XLSheet=XLApp.ActiveSheet
*// encabezados del libro en excel *//
*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \
XLSheet.Cells(4,1)="Cant."
XLSheet.Cells(4,1).font.bold=.T.
XLSheet.Cells(4,2)="Código"
XLSheet.Cells(4,2).font.bold=.T.
XLSheet.Cells(4,3)="Articulo"
XLSheet.Cells(4,3).font.bold=.T.
*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \
XLSheet.Cells(4,5)="Cant."
XLSheet.Cells(4,5).font.bold=.T.
XLSheet.Cells(4,6)="Código"
XLSheet.Cells(4,6).font.bold=.T.
XLSheet.Cells(4,7)="Articulo"
XLSheet.Cells(4,7).font.bold=.T.
sele 1
Fila=5
DO CASE && Verifica la forma de seleccionar los datos para ser enviados
CASE Thisform.Optiongroup1.Value = 1 && Marzam
SELECT Articulos_a_solicitar.exp_1,;
Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
SELECT dEnv && Envia los datos
GO top
scan
XLSheet.Cells(Fila,1)=alltrim(dEnv.exp_1)
XLSheet.Cells(Fila,2)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,3)=dEnv.exp_5
Fila=Fila+1
endscan
CASE Thisform.optiongroup1.Value = 2 && Nadro
*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \
SELECT Articulos_a_solicitar.code_nadro,;
Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \
SELECT dEnv && Envia los datos
GO top
SCAN
IF MOD(RECNO(), 2) = 0
*// para un registro par *//
XLSheet.Cells(Fila,5)=dEnv.exp_5
XLSheet.Cells(Fila,6)=alltrim(dEnv.code_nadro)
XLSheet.Cells(Fila,7)=alltrim(dEnv.descrip)
Fila=Fila+1
ELSE
XLSheet.Cells(Fila,1)=dEnv.exp_5
XLSheet.Cells(Fila,2)=alltrim(dEnv.code_nadro)
XLSheet.Cells(Fila,3)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,4)="--"
Fila=Fila
ENDIF
ENDSCAN
CASE Thisform.optiongroup1.Value = 3 && otros
SELECT Articulos_a_solicitar.cve_prov,;
Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
SELECT dEnv && Envia los datos
GO top
scan
XLSheet.Cells(Fila,1)=alltrim(dEnv.cve_prov)
XLSheet.Cells(Fila,2)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,3)=dEnv.exp_5
Fila=Fila+1
endscan
ENDCASE
ELSE
local Fila && Prepara la hoja de excel
wait'Espere Un Momento Exportando Datos' window nowait
_screen.mousepointer=14
TmpSheet=GetObject('','Excel.Sheet')
XLApp=TmpSheet.Application
XLApp.visible=.T.
XLApp.workbooks.add()
XLSheet=XLApp.ActiveSheet
XLSheet.Cells(4,1)="Articulo"
XLSheet.Cells(4,1).font.bold=.T.
XLSheet.Cells(4,2)="Cant."
XLSheet.Cells(4,2).font.bold=.T.
XLSheet.Cells(4,4)="Articulo"
XLSheet.Cells(4,4).font.bold=.T.
XLSheet.Cells(4,5)="Cant."
XLSheet.Cells(4,5).font.bold=.T.
sele 1
Fila=5
SELECT Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
*// comienza el envio de datos a nuetro libro en excel *//
SELECT dEnv
GO top
SCAN
*// la siguiente condicion, mand el informe en dos columnas
*//
IF MOD(RECNO(), 2) = 0
*// para un registro par *//
XLSheet.Cells(Fila,4)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,5)=dEnv.exp_5
Fila=Fila+1
ELSE
*// para un registro primo *//
XLSheet.Cells(Fila,1)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,2)=dEnv.exp_5
XLSheet.Cells(Fila,3)="--"
Fila=Fila
Endif
endscan
Endif
*//;
Ajusta Las celdas al tamaño de los datos;
*//
XLSheet.Range("A:A").font.name="Arial Narrow"
XLSheet.Range("A:A").font.size="10"
XLSheet.Range("B:B").font.name="Arial Narrow"
XLSheet.Range("B:B").font.size="10"
XLSheet.Range("C:C").font.name="Arial Narrow"
XLSheet.Range("C:C").font.size="10"
XLSheet.Range("D:D").font.name="Arial Narrow"
XLSheet.Range("D:D").font.size="10"
XLSheet.Range("E:E").font.name="Arial Narrow"
XLSheet.Range("E:E").font.size="10"
XLSheet.Range("F:F").font.name="Arial Narrow"
XLSheet.Range("F:F").font.size="10"
XLSheet.Range("G:G").font.name="Arial Narrow"
XLSheet.Range("G:G").font.size="10"
XLSheet.Columns("A:A").EntireColumn.AutoFit
XLSheet.Columns("B:B").EntireColumn.AutoFit
XLSheet.Columns("C:C").EntireColumn.AutoFit
XLSheet.Columns("D:D").EntireColumn.AutoFit
XLSheet.Columns("E:E").EntireColumn.AutoFit
XLSheet.Columns("F:F").EntireColumn.AutoFit
XLSheet.Columns("G:G").EntireColumn.AutoFit
*// Datos de la hoja, despues de ajustar las columnas;
para evitar que se ajuste a los nuevos campos;
*//
SET DATE long
XLSheet.Cells(1,1)="Fecha: " + DTOC(DATE())
XLSheet.Cells(1,1).font.bold=.T.
XLSheet.Cells(1,1).font.size="11"
XLSheet.Cells(1,1).font.name="Arial"
SET DATE short
_screen.mousepointer=0
Saludos desde Mexico.