1.格式化文本,动态添加空格
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function formatStr(const srcStr: string;Leng:integer): string;
var i, iLen: integer;
begin //先把原字符串赋值给返回字符串Result
Result:= srcStr;
//计算相差多少空格
iLen:= Leng - Length(srcStr);
//在返回字符串后,补齐空格
for i:= 1 to iLen do
begin
Result:= Result + ' ';
end;
end;
|
2.给Panle添加有颜色的边框
代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
unit Unit1;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TPanel = class(ExtCtrls.TPanel)
public
procedure Paint; override;
end;
type TForm1 = class(TForm)
Panel1: TPanel;
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation{$R *.dfm}
{ TPanel }procedure TPanel.Paint;
begin inherited;
Canvas.Pen.Color :=clBlue;
Canvas.Rectangle(ClientRect);
end;
end.
|
3.将DBGRID的数据导出到EXCEL
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
function ExportToExcel(dbgrid:tdbgrid):boolean;
const
xlNormal=-4143;
var
i,j,k:integer;
str,filename:string;
excel:OleVariant;
SavePlace: TBookmark;
savedialog:tsavedialog;
ProgressBar1:TProgressBar;
begin
result:=false;
filename:='';
if dbgrid.DataSource.DataSet.RecordCount>65536 then
begin if application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno then
exit;
end;
screen.Cursor:=crHourGlass;
try excel:=CreateOleObject('Excel.Application');
excel.workbooks.add;
except
screen.cursor:=crDefault;
showmessage('无法调用Excel!');
exit;
end;
savedialog:=tsavedialog.Create(nil);
savedialog.Filter:='Excel文件(*.xls)|*.xls';
if savedialog.Execute then
begin
if FileExists(savedialog.FileName) then try if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then DeleteFile(PChar(savedialog.FileName))
else begin
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
application.ProcessMessages;
if filename='' then begin result:=false;
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
k:=0;
for i:=0 to dbgrid.Columns.count-1 do begin if dbgrid.Columns.Items[i].Visible then begin //Excel.Columns[k+1].ColumnWidth:=dbgrid.Columns.Items[i].Title.Column.Width;
excel.cells[1,k+1]:=dbgrid.Columns.Items[i].Title.Caption;
inc(k);
end;
end;
dbgrid.DataSource.DataSet.DisableControls;
saveplace:=dbgrid.DataSource.DataSet.GetBookmark;
dbgrid.DataSource.dataset.First;
i:=2;
if dbgrid.DataSource.DataSet.recordcount>65536 then
ProgressBar1:=ProgressBarform(65536)
else ProgressBar1:=ProgressBarform(dbgrid.DataSource.DataSet.recordcount);
while not dbgrid.DataSource.dataset.Eof do begin k:=0;
for j:=0 to dbgrid.Columns.count-1 do begin if dbgrid.Columns.Items[j].Visible then
begin excel.cells[i,k+1].NumberFormat:='@';
if not dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).isnull then begin str := dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).value;
Excel.Cells[i, k + 1] := Str;
end;
inc(k);
end
else
continue;
end;
if i=65536 then break;
inc(i);
ProgressBar1.StepBy(1);
dbgrid.DataSource.dataset.next;
end;
progressbar1.Owner.Free;
application.ProcessMessages;
dbgrid.DataSource.dataset.GotoBookmark(SavePlace);
dbgrid.DataSource.dataset.EnableControls;
try
if copy(FileName,length(FileName)-3,4)<>'.xls' then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'', '',False,False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
//Excel.Visible := true;
Excel.Quit;
screen.cursor:=crDefault;
Result:= true;
end;
|
4.将Adoquery的数据导出到Excel
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
function queryExportToExcel(queryexport:tadoquery):boolean;
const
xlNormal=-4143;
var
i,j,k:integer;
str,filename:string;
excel:OleVariant;
savedialog:tsavedialog;
ProgressBar1:TProgressBar;
begin
result:=false;
filename:='';
if queryexport.RecordCount>65536 then
begin if application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno then
exit;
end;
screen.Cursor:=crHourGlass;
try excel:=CreateOleObject('Excel.Application');
excel.workbooks.add;
except screen.cursor:=crDefault;
showmessage('无法调用Excel!');
exit;
end;
savedialog:=tsavedialog.Create(nil);
savedialog.Filter:='Excel文件(*.xls)|*.xls';
if savedialog.Execute then
begin
if FileExists(savedialog.FileName) then try if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then
DeleteFile(PChar(savedialog.FileName))
else begin
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
application.ProcessMessages;
if filename='' then
begin
result:=false;
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
k:=0;
for i:=0 to queryexport.FieldCount-1 do
begin
excel.cells[1,k+1]:=queryexport.Fields[i].FieldName;
inc(k);
end;
queryexport.First;
i:=2;
if queryexport.recordcount>65536 then
ProgressBar1:=ProgressBarform(65536)
else ProgressBar1:=ProgressBarform(queryexport.recordcount);
while not queryexport.Eof do
begin
k:=0;
for j:=0 to queryexport.FieldCount-1 do
begin excel.cells[i,k+1].NumberFormat:='@';
if not queryexport.fieldbyname(queryexport.Fields[j].FieldName).isnull then
begin
str:=queryexport.fieldbyname(queryexport.Fields[j].FieldName).AsString;
Excel.Cells[i, k + 1] := Str;
end;
inc(k);
end;
if i=65536 then
break;
inc(i);
ProgressBar1.StepBy(1);
queryexport.next;
end;
progressbar1.Owner.Free;
application.ProcessMessages;
try
if copy(FileName,length(FileName)-3,4)<>'.xls' then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'', '',False,False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
//Excel.Visible := true;
Excel.Quit;
screen.cursor:=crDefault;
Result := true;
end;
end.
|