procedure TPromotionfrm.BitBtn3Click(Sender: TObject); var sSQL:string; i,j,intCount:integer; strFieldNamePath:string; v:Variant; Sheet:Variant; begin if DBGridlist.DataSource.DataSet.IsEmpty then begin beep; showmessage('没有可导出的数据!'); exit; end; sSQL:='select * from RWExcelFileList where Format=''Promotion Analysas Form'''; Datafrm.ADOQueryFormSetting.Close; Datafrm.ADOQueryFormSetting.SQL.Clear; Datafrm.ADOQueryFormSetting.SQL.Add(sSQL); Datafrm.ADOQueryFormSetting.Open; intCount:=Datafrm.ADOQueryFormSetting.RecordCount; if intCount>0 then begin //path strFieldNamePath:=Datafrm.ADOQueryFormSetting.FieldByname('ExcelFile').AsString; try v:=CreateOleObject('Excel.Application'); v.WorkBooks.open(strFieldNamePath); v.Activesheet.Cells.Select; v.Selection.ClearContents; Sheet:=v.workBooks[1].workSheets[1]; Except ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试'); v.DisplayAlerts:=False; v.quit; Exit; end; //添加数据 for j:=0 to DBGridList.Columns.Count-1 do begin i:=0; Sheet.Cells[i+1,j+1]:=DBGridList.Columns[j].FieldName; end; while not Datafrm.ADOQueryTempPromotion.Eof do begin for j:=0 to DBGridList.Columns.Count-1 do begin Sheet.Cells[i+2,j+1]:=Datafrm.ADOQueryTempPromotion.FieldByName(DBGridList.Columns[j].FieldName).AsString; end; inc(i); Datafrm.ADOQueryTempPromotion.Next; end; //添加数据 if not VarIsEmpty(v) then begin v.DisplayAlerts:=true; v.WorkBooks[1].close;//(True,'strFieldNamePath'); v.quit; // Application.Restore; // Application.BringToFront; end; end;//path end;
procedure TPromotionfrm.BitBtn3Click(Sender: TObject); var sSQL:string; i,j,intCount:integer; strFieldNamePath:string; v:Variant; Sheet:Variant; begin if DBGridlist.DataSource.DataSet.IsEmpty then begin beep; showmessage('没有可导出的数据!'); exit; end; try v:=CreateOleObject('Excel.Application'); v.WorkBooks.add(savedialog1.filename,null,0); v.Activesheet.Cells.Select; v.Selection.ClearContents; Sheet:=v.workBooks[1].workSheets[1]; Except ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试'); v.DisplayAlerts:=False; v.quit; Exit; end; //添加数据 sheet.cell[ 1,1]:= //添加数据 if not VarIsEmpty(v) then begin v.DisplayAlerts:=true; v.WorkBooks[1].close;//(True,'strFieldNamePath'); v.quit; // Application.Restore; // Application.BringToFront; end; end;//path end;
如果没有格式要求就用下面这个最简单的方法吧.procedure TForm1.Button1Click(Sender: TObject); var strList : TStringList; i : integer; str : string; begin strList := TStringList.Create; ADOQuery1.First; while not ADOQuery1.eof do begin str := ''; for i:=0 to ADOQuery1.fieldcount-1 do begin str:=str+ADOQuery1.fields[i].asstring+#9; end; strlist.add(str); ADOQuery1.Next; end; strlist.SaveToFile('e:\a.xls'); end;
2、用excel打开它就可以了。
把dbgrid显示的数据搬到excel中
在循环中实现
cell[x,y] := query3.fieldbyname('').asstring;
var
sSQL:string;
i,j,intCount:integer;
strFieldNamePath:string;
v:Variant;
Sheet:Variant;
begin
if DBGridlist.DataSource.DataSet.IsEmpty then
begin
beep;
showmessage('没有可导出的数据!');
exit;
end; sSQL:='select * from RWExcelFileList where Format=''Promotion Analysas Form''';
Datafrm.ADOQueryFormSetting.Close;
Datafrm.ADOQueryFormSetting.SQL.Clear;
Datafrm.ADOQueryFormSetting.SQL.Add(sSQL);
Datafrm.ADOQueryFormSetting.Open;
intCount:=Datafrm.ADOQueryFormSetting.RecordCount;
if intCount>0 then
begin //path
strFieldNamePath:=Datafrm.ADOQueryFormSetting.FieldByname('ExcelFile').AsString; try
v:=CreateOleObject('Excel.Application');
v.WorkBooks.open(strFieldNamePath);
v.Activesheet.Cells.Select;
v.Selection.ClearContents;
Sheet:=v.workBooks[1].workSheets[1]; Except
ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');
v.DisplayAlerts:=False;
v.quit;
Exit;
end; //添加数据
for j:=0 to DBGridList.Columns.Count-1 do
begin
i:=0;
Sheet.Cells[i+1,j+1]:=DBGridList.Columns[j].FieldName;
end;
while not Datafrm.ADOQueryTempPromotion.Eof do
begin
for j:=0 to DBGridList.Columns.Count-1 do
begin
Sheet.Cells[i+2,j+1]:=Datafrm.ADOQueryTempPromotion.FieldByName(DBGridList.Columns[j].FieldName).AsString;
end;
inc(i);
Datafrm.ADOQueryTempPromotion.Next;
end;
//添加数据 if not VarIsEmpty(v) then
begin
v.DisplayAlerts:=true;
v.WorkBooks[1].close;//(True,'strFieldNamePath');
v.quit;
// Application.Restore;
// Application.BringToFront;
end; end;//path
end;
var
sSQL:string;
i,j,intCount:integer;
strFieldNamePath:string;
v:Variant;
Sheet:Variant;
begin
if DBGridlist.DataSource.DataSet.IsEmpty then
begin
beep;
showmessage('没有可导出的数据!');
exit;
end;
try
v:=CreateOleObject('Excel.Application');
v.WorkBooks.add(savedialog1.filename,null,0);
v.Activesheet.Cells.Select;
v.Selection.ClearContents;
Sheet:=v.workBooks[1].workSheets[1]; Except
ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');
v.DisplayAlerts:=False;
v.quit;
Exit;
end; //添加数据
sheet.cell[ 1,1]:= //添加数据 if not VarIsEmpty(v) then
begin
v.DisplayAlerts:=true;
v.WorkBooks[1].close;//(True,'strFieldNamePath');
v.quit;
// Application.Restore;
// Application.BringToFront;
end; end;//path
end;
var
strList : TStringList;
i : integer;
str : string;
begin
strList := TStringList.Create;
ADOQuery1.First;
while not ADOQuery1.eof do
begin
str := '';
for i:=0 to ADOQuery1.fieldcount-1 do
begin
str:=str+ADOQuery1.fields[i].asstring+#9;
end;
strlist.add(str);
ADOQuery1.Next;
end;
strlist.SaveToFile('e:\a.xls');
end;
一:如何把excel中表格的宽度改成和dbgrid中的宽度一样
二:能不能自动生成一个.xls文件并保存,现在excel会弹出一个说源文档已经改变,问要不要保存修改的对话框。