unit u_ExportEXCEL;
interface
uses classes;
type TXLSExport =
class(TObject)
private
fs : TFilestream;
public
constructor Create(filename :
string);
destructor Destroy;
override;
procedure Write(
const Col, Row: Word;
const Value: Integer);
overload;
procedure Write(
const Col, Row: Word;
const Value: Double);
overload;
procedure Write(
const Col, Row: Word;
const Value:
string);
overload;
end;
implementation
const
CXlsBof :
array[0..5]
of Word = ($809, 8, 00, $10, 1, 0);
CXlsEof :
array[0..1]
of Word = ($0A, 00);
CXlsLabel :
array[0..5]
of Word = ($204, 0, 0, 0, 0, 0);
CXlsNumber :
array[0..4]
of Word = ($203, 14, 0, 0, 0);
CXlsRk :
array[0..4]
of Word = ($27E, 10, 0, 0, 0);
constructor TXLSExport.Create(filename :
string);
begin
inherited Create;
fs := TFileStream.Create(filename,fmCreate);
fs.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
end;
destructor TXLSExport.Destroy;
begin
fs.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
inherited Destroy;
end;
procedure TXLSExport.
Write(
const Col, Row: Word;
const Value: Integer);
var
V: Integer;
begin
CXlsRk[2] := Row;
CXlsRk[3] := Col;
fs.WriteBuffer(CXlsRk, SizeOf(CXlsRk));
V := (Value
shl 2)
or 2;
fs.WriteBuffer(V, 4);
end;
procedure TXLSExport.
Write(
const Col, Row: Word;
const Value: Double);
begin
CXlsNumber[2] := Row;
CXlsNumber[3] := Col;
fs.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));
fs.WriteBuffer(Value, 8);
end;
procedure TXLSExport.
Write(
const Col, Row: Word;
const Value:
string);
var L: Word;
begin
L := Length(Value);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := Row;
CXlsLabel[3] := Col;
CXlsLabel[5] := L;
fs.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
fs.WriteBuffer(Pointer(Value)^, L);
end;
end.