Olá a Todos,
Eu sabia que tinha algum exemplo relacionado ao xls vejam o código:
Obs.: Serve para clipper e xharbour.
XLS.CH:
Código: Selecionar todos
//----------------------------------------------------------
// XLS.CH
//
// TXls es una clase escrita en Clipper, basada en Objects
// que permite generar archivos Microsoft Excel 2.0 en
// forma nativa ( sin usar Automatizacion y ni siquiera
// tener Excel instalado )
//
// Basado en la implementacion en Visual Basici de
// Mark O'Brien. Microsoft Corporation
//
// Version Clipper :
//Yamil Bracho (brachoy@pdvsa.com)
// Nov,1999
// Caracas, Venezuela
//----------------------------------------------------------
#xcommand OPEN XLS <oXls> ;
FILENAME <cFileName> ;
=> ;
<oXls> := TXls():New( <cFileName>, .T. )
#xcommand @ <nRow>, <nCol> SAY <cMsg> ;
<of:OF> <oXls> ;
=> ;
<oXls>:Write( <nRow>, <nCol>, <cMsg> )
#xcommand CLOSE XLS <oXls> ;
=> ;
<oXls>:Close()
Demonstração do XlSFUNC
Código: Selecionar todos
#include "xls.ch"
#define TXT_ELEMS 12
#define TXT_OPCO1 1
#define TXT_OPCO2 2
#define TXT_LEN1 3
#define TXT_LEN2 4
#define TXT_ROW1 5
#define TXT_ROW2 6
#define TXT_COL1 7
#define TXT_COL2 8
#define TXT_RGBAT1 9
#define TXT_RGBAT2 10
#define TXT_RGBAT3 11
#define TXT_LEN 12
//---------------------------------------------------------
// DemoFunc.PRG
// Demostracion de xlsFunc
//
// xlsFunc es una conjunto de rutinas para generar archivos
// Microsoft Excel 2.0 en forma nativa ( sin usar
// Automatizacion y ni siquiera tener Excel instalado )
//
// Basado en la implementacion en Visual Basici de
// Mark O'Brien. Microsoft Corporation
//
// Version Clipper :
// Yamil Bracho (brachoy@pdvsa.com)
// Nov,1999
// Caracas, Venezuela
//---------------------------------------------------------
function main()
local nXls
local f
local i
local aData := { { "Venezuela", "Caracas", 100 } ,;
{ "Peru", "Lima", 200 } ,;
{ "Colombia", "Bogota", 300 } ,;
{ "Argentina", "Buenos Aires", 400 } ,;
{ "Chile", "Santiago", 500 } ,;
{ "Brasil", "Brasilia", 600 } ,;
{ "Argentina", "Buenos Aires", 700 } ,;
{ "Canada", "Ottawa", 800 } ,;
{ "Mexico", "Ciudad de Mexico", 900 } }
nXls := xlsOpen( "Pais.xls" )
xlsWrite( nXls, 1, 1, "Pais" )
xlsWrite( nXls, 1, 2, "Capital" )
xlsWrite( nXls, 1, 3, "Poblacion" )
f := 2
for i:=1 to Len( aData )
xlsWrite( nXls, f, 1, aData[ i , 1 ] )
xlsWrite( nXls, f, 2, aData[ i , 2 ] )
xlsWrite( nXls, f, 3, Ltrim( Str( aData[ i , 3 ] )))
f++
next i
xlsClose( nXls )
return nil
FUNCTION xlsOpen(cFile)
LOCAL nHandle
LOCAL cBof := CHR(9)+CHR(0)+CHR(4)+CHR(0)+;
CHR(2)+CHR(0)+CHR(10)+CHR(0)
nHandle := FCREATE(cFile)
FWRITE(nHandle,cBof,LEN(cBof))
RETURN nHandle
FUNCTION xlsClose(nHandle)
LOCAL cEof := CHR(10)+CHR(0)+CHR(0)+CHR(0)
FWRITE(nHandle,cEof,LEN(cEof))
FCLOSE(nHandle)
RETURN nil
FUNCTION xlsWrite(nHandle,nRow,nCol,cString)
LOCAL anHeader
LOCAL nLen
LOCAL nI
//---------------------------------------------------
// Arreglo para almacenar el marcador de registro
// etiqueta
//---------------------------------------------------
anHeader := ARRAY(TXT_ELEMS)
anHeader[ TXT_OPCO1 ] := 4
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 10
anHeader[ TXT_LEN2 ] := 0
anHeader[ TXT_ROW2 ] := 0
anHeader[ TXT_COL2 ] := 0
anHeader[ TXT_RGBAT1 ] := 0
anHeader[ TXT_RGBAT2 ] := 0
anHeader[ TXT_RGBAT3 ] := 0
anHeader[ TXT_LEN ] := 2
nLen := LEN(cString)
//------------------------------
// Longitud del texto a escribir
//------------------------------
anHeader[ TXT_LEN ] := nLen
//----------------------
// Longitud del registro
//----------------------
anHeader[ TXT_LEN1 ] := 8+nLen
//---------------------------------------------
// En le formato BIFF se comienza desde cero y
// no desde 1 como estamos pasando los datos
//---------------------------------------------
nI := nRow - 1
anHeader[ TXT_ROW1 ] := nI - (INT(nI / 256) * 256)
anHeader[ TXT_ROW2 ] := INT(nI / 256)
anHeader[ TXT_COL1 ] := nCol - 1
//-------------------
// Escribe encabezado
//-------------------
AEVAL(anHeader,{| v | FWRITE(nHandle,CHR(v),1)})
//-----------------------------------------------------
// Escribe la data
//-----------------------------------------------------
FOR nI := 1 TO nLen
FWRITE(nHandle,SUBSTR(cString,nI,1),1)
NEXT nI
RETURN nil