Sorry, somehow I cannot attach files...
So here it is...
/***********************************************************************/
//Creates XLS 2.0 files...
//Source written in xHarbour 1.0
//EXAMPLE:
//xls_f := XLSOpen('C:\TEST.XLS')
//For x := 1 to 1024
// XLSWrite(xls_f,x,1,transform(x,'9999'),.F.,1,0)
//Next
//XLSClose(xls_f)
/***********************************************************************/
// Label Header
#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
function xlsOpen( cFile )
local nHandle
//Version 2.1
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,xData,Shade,nFont,Pic)
Do Case
Case VALTYPE(xData) = 'C'
XLSWriteS(nHandle,nRow,nCol,xData,Shade,nFont,Pic)
Case VALTYPE(xData) = 'N'
XLSWriteN(nHandle,nRow,nCol,xData,Shade,nFont,Pic)
Case VALTYPE(xData) = 'D'
XLSWriteS(nHandle,nRow,nCol,DTOC(xData),Shade,nFont,Pic)
EndCase
RETURN nil
function xlsWriteS( nHandle, nRow, nCol, cString,Shade,nFont,Pic)
//String Value...
Local xlsPat
//Rows and cols start at (1,1)
local anHeader
local nLen
local nI
Default Shade to .F.
Default nFont to 0
Default Pic to 0
nFont := nFont * 64 + Pic
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
If Shade = .T.
anHeader[ TXT_RGBAT1 ] := 0
anHeader[ TXT_RGBAT2 ] := nFont
anHeader[ TXT_RGBAT3 ] := 192 //124
else
anHeader[ TXT_RGBAT2 ] := nFont
anHeader[ TXT_RGBAT3 ] := 0
EndIf
anHeader[ TXT_LEN ] := 2
nLen := Len(cString)
anHeader[ TXT_LEN ] := nLen
anHeader[ TXT_LEN1 ] := 8 + nLen
nI := nRow - 1
anHeader[ TXT_ROW1 ] := nI - (Int( nI / 256 ) * 256 )
anHeader[ TXT_ROW2 ] := Int( nI / 256 )
anHeader[ TXT_COL1 ] := nCol - 1
//Write de Header...
Aeval( anHeader, { | v | fWrite( nHandle, Chr( v ), 1 )})
//Write the Data...
for nI:=1 to nLen
fWrite( nHandle, SubStr( cString, nI, 1 ), 1 )
next nI
return nil
function xlsWriteI( nHandle, nRow, nCol,i,Shade,nFont,Pic) //INTEGER
Value...
//Rows and cols start at (1,1)
local anHeader
local nLen
local nI
Default Shade to .F.
Default nFont to 0
Default Pic to 0
nFont := nFont * 64 + Pic
anHeader := Array(4+9) //13=Length of Integer Value
Body...
anHeader[ TXT_OPCO1 ] := 2
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 9
anHeader[ TXT_LEN2 ] := 0
anHeader[ TXT_ROW2 ] := 0
anHeader[ TXT_COL2 ] := 0
If Shade = .T.
anHeader[ TXT_RGBAT2 ] := nFont
anHeader[ TXT_RGBAT3 ] := 192
else
anHeader[ TXT_RGBAT2 ] := nFont
anHeader[ TXT_RGBAT3 ] := 0
EndIf
anHeader[12] := i - (Int(i/256) * 256)
anHeader[13] := Int(i/256)
anHeader[ TXT_LEN1 ] := 9
nI := nRow - 1
anHeader[ TXT_ROW1 ] := nI - (Int( nI / 256 ) * 256 )
anHeader[ TXT_ROW2 ] := Int( nI / 256 )
anHeader[ TXT_COL1 ] := nCol - 1
//Write de Header...
Aeval( anHeader, { | v | fWrite( nHandle, Chr( v ), 1 )})
return nil
function xlsWriteN( nHandle, nRow, nCol,i,Shade,nFont,Pic) //Number
Value...
//Rows and cols start at (1,1)
local anHeader
local nLen
local nI
Local r
Default Shade to .F.
Default nFont to 0
Default Pic to 0
nFont := nFont * 64 + Pic
anHeader := Array(4+15) //19=Length of Number Value
Body...
anHeader[ TXT_OPCO1 ] := 3
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 15
anHeader[ TXT_LEN2 ] := 0
anHeader[ TXT_ROW2 ] := 0
anHeader[ TXT_COL2 ] := 0
anHeader[ TXT_RGBAT1 ] := 42
If Shade = .T.
anHeader[ TXT_RGBAT2 ] := nFont
anHeader[ TXT_RGBAT3 ] := 192
else
anHeader[ TXT_RGBAT2 ] := nFont
anHeader[ TXT_RGBAT3 ] := 0
EndIf
r := A2Bin({i},'Double')
anHeader[12] := ASC(SubStr(r,1,1))
anHeader[13] := ASC(SubStr(r,2,1))
anHeader[14] := ASC(SubStr(r,3,1))
anHeader[15] := ASC(SubStr(r,4,1))
anHeader[16] := ASC(SubStr(r,5,1))
anHeader[17] := ASC(SubStr(r,6,1))
anHeader[18] := ASC(SubStr(r,7,1))
anHeader[19] := ASC(SubStr(r,8,1))
anHeader[ TXT_LEN1 ] := 15
nI := nRow - 1
anHeader[ TXT_ROW1 ] := nI - (Int( nI / 256 ) * 256 )
anHeader[ TXT_ROW2 ] := Int( nI / 256 )
anHeader[ TXT_COL1 ] := nCol - 1
//Write de Header...
Aeval( anHeader, { | v | fWrite( nHandle, Chr( v ), 1 )})
return nil
function xlsColSize(nHandle,nCol,n)
local anHeader
n := n*256
anHeader := Array(4+4)
anHeader[ TXT_OPCO1 ] := 36 //24h
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 4
anHeader[ TXT_LEN2 ] := 0
anHeader[5] := nCol-1
anHeader[6] := nCol-1
anHeader[7] := n-(Int(n/256)*256)
anHeader[8] := Int(n/256)
//Write de Header...
Aeval( anHeader, { | v | fWrite( nHandle, Chr( v ), 1 )})
return nil
function
xlsFont(nHandle,FontName,Height,Bold,Italic,UnderLine,StrikeOut,Color)
local anHeader,nI,r
FontName := AllTrim(FontName)
r := Bold + Italic*2 + Underline*4 + StrikeOut*8
anHeader := Array(4+4)
anHeader[ TXT_OPCO1 ] := 49 //31h
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 4+Len(FontName)
anHeader[ TXT_LEN2 ] := 0
anHeader[5] := Height
anHeader[6] := 0 //Reserved
anHeader[7] := r
anHeader[8] := Len(FontName)
//Write de Header...
Aeval(anHeader,{|v|fWrite(nHandle,Chr(v),1)})
//Write the Data...
for nI:=1 to Len(FontName)
fWrite( nHandle, SubStr(FontName,nI,1),1)
next nI
If Color <> NIL
anHeader := Array(4+2)
anHeader[ TXT_OPCO1 ] := 69 //45h
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 2
anHeader[ TXT_LEN2 ] := 0
anHeader[5] := Color
anHeader[6] := 0
//Write de Header...
Aeval(anHeader,{|v|fWrite(nHandle,Chr(v),1)})
EndIf
return nil
function xlsFormat(nHandle,Pic)
local anHeader,nI,r
Pic := AllTrim(Pic)
anHeader := Array(4+1)
anHeader[ TXT_OPCO1 ] := 30 //1Eh
anHeader[ TXT_OPCO2 ] := 0
anHeader[ TXT_LEN1 ] := 1+Len(Pic)
anHeader[ TXT_LEN2 ] := 0
anHeader[5] := Len(Pic)
//Write de Header...
Aeval(anHeader,{|v|fWrite(nHandle,Chr(v),1)})
//Write the Data...
for nI:=1 to Len(Pic)
fWrite( nHandle, SubStr(Pic,nI,1),1)
next nI
return nil
_______________________________________________
Harbour-users mailing list (attachment size limit: 40KB)
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour-users