把excel当做数据库,做个连接就可以操作了 如用ado方法:在delphi中加入adoconnection控件,双击后选择jet 4.0 ole db,在连接页中 选择数据库的名字(.xls),再双击全部(all)页中的Extended Properties,在value中 填入Excel 8.0,OK! 在控件ADODataSet1的CommandText属性中选择了select * from Sheet1$后,别忘了在 Sheet1$的两边加上中括号[],否则出现“FROM子句语法错误”。或者用ADOQuery1控件:在 它的SQL属性中写入:select * from [Sheet1$]。
unit gzscpas;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, ComCtrls, StdCtrls,comobj,inifiles;type TgzscForm = class(TForm) Button1: TButton; DateTimePicker1: TDateTimePicker; ADOQuery1: TADOQuery; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;var gzscForm: TgzscForm; app_path:string;implementation{$R *.dfm}procedure TgzscForm.Button1Click(Sender: TObject); var ExcelApp,rangee:variant; i,row:integer; time1,time2,path :string; begin app_path:=extractfilepath(application.ExeName); with Tinifile.create(app_path+'pay.ini') do begin path :=app_path+'\page\2003.xls'; end; time1:=formatdatetime('mm',DateTimePicker1.Date); time2:=formatdatetime('yyyy',DateTimePicker1.Date); ExcelApp:=createoleobject('excel.application'); ExcelApp.WorkBooks.Open( path ); ExcelApp.WorkSheets[2].Activate; ExcelApp.Cells[3,1].Activate; rangee:=ExcelApp.activecell; with adoquery1 do begin close; sql.Clear ; sql.add('select * from gz where month(gzsfrq)='+time1+' and year(gzsfrq)='+time2 ); open; for i:=0 to fields.Count -1 do begin rangee.value:=fields[i].DisplayLabel ; if i=6 then begin rangee.value :=time2+time1; rangee:=rangee.next; end; case I of 4..5: rangee.value :=''; 0..1: rangee.value :=''; else rangee:=rangee.next; end; end; first; row:=4; while not eof do begin rangee:=ExcelApp.range['a'+inttostr(row),'a'+ inttostr(row)]; for i:=0 to fields.Count -1 do begin rangee.value:=fields[i].AsString ; rangee:=rangee.next; end; next; inc(row); end; end; ExcelApp.Visible := True; ExcelApp.ActiveSheet.PrintPreview; end;procedure TgzscForm.FormClose(Sender: TObject; var Action: TCloseAction); begin action:=cafree; end;procedure TgzscForm.FormDestroy(Sender: TObject); begin gzscform:=nil; end;end. 试试这段代码如何?我是通过了,就看您如何使用拉!
如用ado方法:在delphi中加入adoconnection控件,双击后选择jet 4.0 ole db,在连接页中
选择数据库的名字(.xls),再双击全部(all)页中的Extended Properties,在value中
填入Excel 8.0,OK!
在控件ADODataSet1的CommandText属性中选择了select * from Sheet1$后,别忘了在
Sheet1$的两边加上中括号[],否则出现“FROM子句语法错误”。或者用ADOQuery1控件:在
它的SQL属性中写入:select * from [Sheet1$]。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls,comobj,inifiles;type
TgzscForm = class(TForm)
Button1: TButton;
DateTimePicker1: TDateTimePicker;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
gzscForm: TgzscForm;
app_path:string;implementation{$R *.dfm}procedure TgzscForm.Button1Click(Sender: TObject);
var
ExcelApp,rangee:variant;
i,row:integer;
time1,time2,path :string;
begin
app_path:=extractfilepath(application.ExeName);
with Tinifile.create(app_path+'pay.ini') do
begin
path :=app_path+'\page\2003.xls';
end;
time1:=formatdatetime('mm',DateTimePicker1.Date);
time2:=formatdatetime('yyyy',DateTimePicker1.Date);
ExcelApp:=createoleobject('excel.application');
ExcelApp.WorkBooks.Open( path );
ExcelApp.WorkSheets[2].Activate;
ExcelApp.Cells[3,1].Activate;
rangee:=ExcelApp.activecell;
with adoquery1 do
begin
close;
sql.Clear ;
sql.add('select * from gz where month(gzsfrq)='+time1+' and year(gzsfrq)='+time2 );
open;
for i:=0 to fields.Count -1 do
begin
rangee.value:=fields[i].DisplayLabel ;
if i=6 then
begin
rangee.value :=time2+time1;
rangee:=rangee.next;
end;
case I of
4..5: rangee.value :='';
0..1: rangee.value :='';
else
rangee:=rangee.next;
end;
end;
first;
row:=4;
while not eof do
begin
rangee:=ExcelApp.range['a'+inttostr(row),'a'+ inttostr(row)];
for i:=0 to fields.Count -1 do
begin
rangee.value:=fields[i].AsString ;
rangee:=rangee.next;
end;
next;
inc(row);
end;
end;
ExcelApp.Visible := True;
ExcelApp.ActiveSheet.PrintPreview;
end;procedure TgzscForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;procedure TgzscForm.FormDestroy(Sender: TObject);
begin
gzscform:=nil;
end;end.
试试这段代码如何?我是通过了,就看您如何使用拉!