Base de datos

Hola experto:
Ahí va mi pregunta: Quiero traspasar desde visual los datos de una tabla de access a una tabla de Excel. Si me ayudaras también para que esta tabla de excel venga con fórmulas como de suma, división, multiplicación, etc.; seria excelente.
Lucho Miguel

1 Respuesta

Respuesta
1
Es difícil contestar tu pregunta, pero creo que será más fácil si te mando unos ejemplos; analizalos y quedo a la espera de tus comentarios.
La función COPY TO ... TYPE XL5 tiene la limitación de no poder copiar más de 16.384 registros (que es la limitación del número de filas de Excel 5.0 ó '95).
Podemos usar OLE AUTOMATION para abrir la tabla con Excel y luego guardarla con "Guardar como XLS" desde Excel.
Ejemplo:
USE MiTabla && RECCOUNT("MiTabla") > 16384 registros !!!
lcDBF = "C:\MiDBF.dbf"
lcXLS = "C:\MiXLS.xls"
COPY TO (lcDBF) TYPE FOX2X AS 850
loExcel = CREATEOBJECT("Excel.Application")
WITH loExcel.Application
.Workbooks.Open(lcDBF)
.ActiveWorkbook.SaveAs(lcXLS, -4143, "", "", .F., .F.)
.Workbooks.Close
Endwith
RELEASE loExcel
Recordar que el número máximo de filas de Excel 97 y 2000 es de 65.536 filas.
*/*/*/*/*/
Imprimir con formato de Excel
#define xlLastCell 11
#define xlMaximized -4137
#define xlRangeAutoformatClassic2 2
#define xlPortrait 1
use MyTable && or SELECT * INTO MyCursor
cFileName = "MyXLSFile" && o lo que sea, incluyendo ruta
*copy to (cFileName) fields (cFields) TYPE xls
copy to (cFileName) TYPE xls
* abrir excel y formatear datos
oExcel = CreateObject("Excel.Application")
if vartype(oExcel) != "O"
* mostar mensaje de error aqui
return .F.
endif
* hacer a Excel visible durante desarrollo
*oExcel.visible = .T.
* abrir el workbook
oExcel.SheetsInNewWorkBook = 1
oWorkbook = oExcel.Workbooks.Open(cFileName)
* enombrar la página (shhet) a lo que quiera
oActiveSheet = oExcel.ActiveSheet
oActiveSheet.Name = "MyData"
oExcelApp = oExcel.Application
oExcelApp.WindowState = xlMaximized
* buscar dirección de la última celda
lcLastCell = oExcel.ActiveCell.SpecialCells(xlLastCell).Address()
* ajustar ancho de columnas
lnMarker1 = at("$",lcLastCell,1) && i.e. 1 when lcLastCell = "$AF$105"
lnMarker2 = at("$",lcLastCell,2) && i.e. 4 when lcLastCell = "$AF$105"
lnStartPos = lnMarker1 + 1
lnStrLen = lnMarker2 - lnStartPos
oExcel.Columns("A:" + substr ;
(lcLastCell,lnStartPos,lnStrLen)).EntireColumn.AutoFit
* usar autoformat (aqui usamos 2 como ejemplo)
oExcel.Range("A" + alltrim(str(nTOPBLANKROWS+1)) + ":" + lcLastCell).Select
oExcel.Selection.AutoFormat(xlRangeAutoformatClassic2,.t.,.t.,.t.,.t.,.t.,.t
.)
* marcar area a imprimir
oActiveSheet.PageSetup.PrintArea = "$A$1:" + lcLastCell
* definir pie de página
With loActiveSheet.PageSetup
*.LeftHeader = ""
*.CenterHeader = ""
*.RightHeader = ""
.LeftFooter = "&BMy Footer goes here&B"
.CenterFooter = "&D"
.RightFooter = "Page &P"
*.PrintHeadings = .F.
.PrintGridlines = .F.
.CenterHorizontally = .T.
.CenterVertically = .F.
.Orientation = xlPortrait
endwith
* guardar Excel en formato nuevo (COPY TO XLS usa formato viejo)
oWorkbook.Save()
* mostrar Excel al usuario
oExcel.visible = .T.
*/*/*/*/*

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas