procedure ExcelExport(SaveDialog : TSaveDialog; ExcelAppli : TExcelApplication;
ExcelWb : TExcelWorkbook; ExcelWsht : TExcelWorksheet;
Query : TVddQuery);
var Filename, CoordCounter:
String;
oleArray1, oleArray2:OleVariant;
i, z, flcid : Integer;
sl, sl2 : TStringlist;
begin
Screen.Cursor := crHourglass;
SaveDialog.Execute;
case SaveDialog.FilterIndex
of
1: Filename := ChangeFileExt(SaveDialog.FileName,'
.xls');
2: Filename := ChangeFileExt(SaveDialog.FileName,'
.xls');
end;
if Filename <> '
'
then
begin
flcid:=GetUserDefaultLCID;
ExcelAppli.Connect;
ExcelAppli.Visible[flcid]:=true;
ExcelAppli.UserControl:=true;
CreateFile(@Filename[1], 0, FILE_SHARE_WRITE,
nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
ExcelWb.ConnectTo(ExcelAppli.Workbooks.Open(filename, False,
False, EmptyParam, '
', False, False, EmptyParam, EmptyParam, false, false,
EmptyParam, EmptyParam, EmptyParam, false, 0));
ExcelWsht.ConnectTo(ExcelWb.Sheets.Item[1]
as ExcelWorkSheet);
sl := TStringList.Create;
sl2 := TStringList.Create;
Query.GetFieldNames(sl);
OleArray1 := VarArrayCreate([0,
Query.RecordCount], varVariant);
OleArray2 := VarArrayCreate([0, sl.Count], varVariant);
for z := 0
to sl.Count - 1
do
begin
OleArray2[z] := sl.Strings[z];
end;
sl2.Add('
A');
sl2.Add('
B');
sl2.Add('
C');
sl2.Add('
D');
sl2.Add('
E');
sl2.Add('
F');
sl2.Add('
G');
sl2.Add('
H');
sl2.Add('
I');
sl2.Add('
J');
sl2.Add('
K');
sl2.Add('
L');
sl2.Add('
M');
sl2.Add('
N');
sl2.Add('
O');
sl2.Add('
P');
sl2.Add('
Q');
sl2.Add('
R');
sl2.Add('
S');
sl2.Add('
T');
sl2.Add('
U');
sl2.Add('
V');
sl2.Add('
W');
sl2.Add('
X');
sl2.Add('
Y');
sl2.Add('
Z');
sl2.Add('
AA');
sl2.Add('
AB');
sl2.Add('
AC');
sl2.Add('
AD');
sl2.Add('
AE');
sl2.Add('
AF');
sl2.Add('
AG');
sl2.Add('
AH');
sl2.Add('
AI');
sl2.Add('
AJ');
sl2.Add('
AK');
sl2.Add('
AL');
sl2.Add('
AM');
sl2.Add('
AN');
sl2.Add('
AO');
sl2.Add('
AP');
sl2.Add('
AQ');
sl2.Add('
AR');
sl2.Add('
AS');
sl2.Add('
AT');
sl2.Add('
AU');
sl2.Add('
AV');
sl2.Add('
AW');
sl2.Add('
AX');
sl2.Add('
AY');
sl2.Add('
AZ');
ExcelWsht.Range[sl2[0]+'
1', sl2[sl.Count-1]+'
1'].Value[EmptyParam] := OleArray2;
if sl.count > sl2.Count
then
begin
ExcelWsht.Range[sl2[0]+'
1', sl2[sl.Count-1]+'
1'].Value[EmptyParam] := OleArray2;
end;
Query.First;
for i := 0
to Query.RecordCount - 1
do
begin
for z := 0
to sl.Count - 1
do
begin
OleArray1[z] :=
Query.FieldByName(sl[z]).AsString;
end;
CoordCounter := IntToStr(i+2);
ExcelWsht.Range[sl2[0]+CoordCounter, sl2[sl.Count-1]+CoordCounter].Value[EmptyParam]:=OleArray1;
Query.Next;
end;
ExcelWsht.Cells.EntireRow.AutoFit;
ExcelWsht.Cells.EntireColumn.AutoFit;
end;
Screen.Cursor := crDefault;
sl.Free;
sl2.Free;
end;