procedure TFileForm.BitBtn4Click(Sender: TObject); var Ole_Exl:TExcelApplication; Ole_rang:Excel2000.Range; Ole_Workbook: Excel2000._Workbook; Int_row,int_col:integer; begin cds_profile.Open; cds_profile.DisableControls; cds_profile.First; Try Ole_Exl:=TExcelApplication.Create(self); Ole_Workbook:=Ole_Exl.Workbooks.Add('c:\book1.xls',0); Except application.MessageBox('没有Excel或没有book1.xls!','提示',mb_ok+mb_iconinformation); abort; End; Ole_rang:=Ole_Exl.Cells; FOR int_row:=1 To cds_profile.RecordCount do Begin For int_col:=0 To dxDBGrid1.ColumnCount-1 do Begin if dxDBgrid1.Columns[int_col].Field.Value<>NULL then Ole_rang.Cells.Item[Int_row,int_col+1]:=dxDBgrid1.Columns[int_col].Field.Value else begin application.MessageBox('数据不完整!','提示!',mb_ok+mb_iconinformation); abort; end; End; cds_profile.Next; End;
user28的方法是把数据显示在dbgrid中,然后到处到excel里
var savename:string; MsExcel,MsExcelWorkBook: variant; My_FileName:String; begin My_FileName:='c:\a.xls'; if not FileExists(My_FileName) then //判斷該文件是否存在 begin showmessage('Error!-The Excel File '+My_FileName+' can''t be found.'); exit; end; try try MsExcel := CreateOleObject('Excel.Application'); //創建 MsExcelWorkBook := MsExcel.WorkBooks.Open(My_FileName); MsExcel.Worksheets[cmbProcess.Text].select; except MessageDlg('Could not start Microsoft Excel.',mtWarning,[mbOK],0); Exit; end; Try SaveToExcel(MsExcel); //自定義函數,用於保存 if Sender = sbtnSave then begin if SaveDialog1.Execute then begin savename:=SaveDialog1.FileName; MsExcelWorkBook.SaveAs(savename); MessageDlg('Save Excel File OK',mtInformation,[mbOK],0); end; end; if Sender = sbtnPrint then begin MsExcel.Visible:=TRUE; MsExcel.WorkSheets[cmbProcess.Text].PrintPreview; end; Except MessageDlg('Excel Error',mtInformation,[mbOK],0); end; finally MsExcelWorkBook.Close(False); MsExcel.Application.Quit; MsExcel:=Null; end; end; //SaveToExcel()函數 var j,i,iGoal,quo,rem,istartRow:integer; vRange1:Variant; irow, iCol : Integer; begin for irow := 0 to cStrGridData.RowCount - 1 do begin for icol := 0 to cStrGridData.ColCount - 1 do if icol >= 10 then MsExcel.Worksheets['Sheet'].Range[Chr(icol+66)+IntToStr(irow+1)].Value:=cStrGridData.cells[icol,irow] else MsExcel.Worksheets['Sheet'].Range[Chr(icol+65)+IntToStr(irow+1)].Value:=cStrGridData.cells[icol,irow]; end; end;
一些入门书也写着的
而且Delphi有这方面的控件
试试看你行的
:)
var
Ole_Exl:TExcelApplication;
Ole_rang:Excel2000.Range;
Ole_Workbook: Excel2000._Workbook;
Int_row,int_col:integer;
begin
cds_profile.Open;
cds_profile.DisableControls;
cds_profile.First;
Try
Ole_Exl:=TExcelApplication.Create(self);
Ole_Workbook:=Ole_Exl.Workbooks.Add('c:\book1.xls',0);
Except
application.MessageBox('没有Excel或没有book1.xls!','提示',mb_ok+mb_iconinformation);
abort;
End;
Ole_rang:=Ole_Exl.Cells;
FOR int_row:=1 To cds_profile.RecordCount do
Begin
For int_col:=0 To dxDBGrid1.ColumnCount-1 do
Begin
if dxDBgrid1.Columns[int_col].Field.Value<>NULL then
Ole_rang.Cells.Item[Int_row,int_col+1]:=dxDBgrid1.Columns[int_col].Field.Value
else
begin
application.MessageBox('数据不完整!','提示!',mb_ok+mb_iconinformation);
abort;
end;
End;
cds_profile.Next;
End;
MsExcel,MsExcelWorkBook: variant;
My_FileName:String;
begin
My_FileName:='c:\a.xls';
if not FileExists(My_FileName) then //判斷該文件是否存在
begin
showmessage('Error!-The Excel File '+My_FileName+' can''t be found.');
exit;
end;
try
try
MsExcel := CreateOleObject('Excel.Application'); //創建
MsExcelWorkBook := MsExcel.WorkBooks.Open(My_FileName);
MsExcel.Worksheets[cmbProcess.Text].select;
except
MessageDlg('Could not start Microsoft Excel.',mtWarning,[mbOK],0);
Exit;
end; Try
SaveToExcel(MsExcel); //自定義函數,用於保存 if Sender = sbtnSave then
begin
if SaveDialog1.Execute then
begin
savename:=SaveDialog1.FileName;
MsExcelWorkBook.SaveAs(savename);
MessageDlg('Save Excel File OK',mtInformation,[mbOK],0);
end;
end;
if Sender = sbtnPrint then
begin
MsExcel.Visible:=TRUE;
MsExcel.WorkSheets[cmbProcess.Text].PrintPreview;
end;
Except
MessageDlg('Excel Error',mtInformation,[mbOK],0);
end;
finally
MsExcelWorkBook.Close(False);
MsExcel.Application.Quit;
MsExcel:=Null;
end;
end;
//SaveToExcel()函數
var j,i,iGoal,quo,rem,istartRow:integer;
vRange1:Variant;
irow, iCol : Integer;
begin
for irow := 0 to cStrGridData.RowCount - 1 do
begin
for icol := 0 to cStrGridData.ColCount - 1 do
if icol >= 10 then
MsExcel.Worksheets['Sheet'].Range[Chr(icol+66)+IntToStr(irow+1)].Value:=cStrGridData.cells[icol,irow]
else
MsExcel.Worksheets['Sheet'].Range[Chr(icol+65)+IntToStr(irow+1)].Value:=cStrGridData.cells[icol,irow];
end;
end;
cStrGridData是一個用於紀錄數據內容的控件名稱;
'cmbProcess.Text'多應該改為'Sheet'
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Excel2000, OleServer, Grids, DBGrids, StdCtrls;type
TForm1 = class(TForm)
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
ComboBox1: TComboBox;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
i : integer ;
begin
ADOQuery1.Close ;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('select * from v170_sa.ordertoivr ') ;
ADOQuery1.Open ;
ComboBox1.Clear ;
ComboBox1.Items.BeginUpdate ;
i:= 0 ;
while not ADOQuery1.Eof do
begin
ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString);
//ComboBox1.Items.ValueFromIndex[i] := ADOQuery1.Fields[1].AsString;
ADOQuery1.Next ;
Inc(i) ;
end ;
ComboBox1.Items.EndUpdate ;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j : integer ;
begin
ExcelWorkSheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect ;
ExcelApplication1.Connect;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(Null,0));
ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.Worksheets.Item[1] as _WorkSheet);
ExcelWorkSheet1.ConnectTo(ExcelWorkbook1.WorkSheets.Add(Null, Null ,Null,
Null, 0) as _WorkSheet); for i := 0 to ADOQuery1.FieldDefList.Count -1 do
begin
ExcelApplication1.Cells.Item[3,i+3]:=ADOQuery1.Fields[i].DisplayName ;
ADOQuery1.First ;
for j := 0 to ADOQuery1.RecordCount -1 do
begin
ExcelWorkSheet1.Rows.ShrinkToFit ;
ExcelApplication1.Cells.Item[4+j,i+3]:=''''+ADOQuery1.Fields[i].AsString ;
ExcelApplication1.Cells.Item[4+j,i+3].font.size:='14';
ExcelWorkSheet1.Rows.ShrinkToFit ;
ADOQuery1.Next ;
end ;
end ;
ExcelApplication1.Caption :='报表输出打印'; //更改 Excel 标题栏
// ExcelWorkbook1.ReadOnlyRecommended[1] := True ;
ExcelWorkbook1.ReadOnly[1];
ExcelApplication1.Visible[0]:=true;//显示当前窗口:end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try ExcelApplication1.ActiveWorkbook.Saved[1] := True ;//放弃存盘
ExcelWorkSheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect ;
ExcelApplication1.Workbooks.Close(1) ;
Application.Terminate ;
except
end ;
end;procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Edit1.Text :=
ComboBox1.Items.ValueFromIndex[ComboBox1.Items.IndexOf(Trim(ComboBox1.Text))];
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB,ComObj;type
TForm1 = class(TForm)
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
var
ExlApp:variant;procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j,rows,cols:Integer;
begin
//创建OLE对象Excel Application
ExlApp:= CreateOleObject('Excel.Application');
try
ExlApp.workBooks.Add;
except
messagebox(handle,'您的机器里可能未安装Microsoft Excel或异常','无法生成',MB_OK or MB_ICONWARNING);
Exit;
end; ExlApp.visible:= true;
hide;
adotable1.Close;
adotable1.Open;
cols:=adotable1.FieldCount;
rows:=adotable1.RecordCount;
try
for i:=0 to dbgrid1.Columns.Count-1 do
begin
ExlApp.cells(1,i+1):=dbgrid1.Columns[i].FieldName;
end; for i:=1 to rows do
begin
for j:=1 to cols do
begin
ExlApp.cells(i+1,j):=DBGrid1.Columns[j-1].Field.Value;
end; dbgrid1.DataSource.DataSet.MoveBy(1);
end;
finally
show;
end;
application.BringToFront;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//关闭eclApp
//若不进行这一步,在任务管理器中会驻留Excel进程
//但可以不必关闭Excel (eclApp.Quit),这样,操作员可以继续编辑或打印表格
ExlApp:= Unassigned;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
showmessage(IntToStr(dbgrid1.Columns.Count));
ShowMessage(IntToStr(adotable1.RecordCount));
end;end.
var
FileName: string;
begin
FileName := ExtractFilePath(Application.ExeName) + 'store.xls';
if FileExists(FileName) then DeleteFile(FileName);
try
acStore.Execute('select * into [Excel 8.0; Database=' + FileName + '].[sheet1] from stable');
MessageBox(self.Handle, '数据已成功导出为store.xls', '提示', mb_IconInformation + mb_Ok);
except
MessageBox(self.Handle, '数据导出失败!', '提示', mb_IconInformation + mb_Ok);
end;
end;这就行了