procedure TForm1.SaveToExcelFile(DbName: TDbGrid);
var
ExcelApp: Variant;
Page: Variant;
i, j: Integer;
SaveDialog: TSaveDialog;
BM: TBookMark;
StrSaveFile: string;
begin
if DbName.DataSource.DataSet.IsEmpty then //ÅжÏTDBGrid×é¼þÖÐÊÇ·ñÓÐÊý¾Ý
begin
messagebox(application.Handle,'ûÓÐÈκÎÊý¾Ý,²»ÄܽøÐб£´æ','¾¯¸æ',mb_ok);
abort;
end;
SaveDialog:=TSaveDialog.Create(Nil); //´´½¨Ò»¸öTSaveDialog×é¼þ£¬ÓÃÓÚ±£´æµ¼ÈëµÄÊý¾Ý
SaveDialog.Filter := '*.xls|*.XLS'; //ÉèÖÃÀ©Õ¹ÃûΪxls
SaveDialog.Execute; //´ò¿ª±£´æ¶Ô»°¿ò
StrSaveFile:=SaveDialog.FileName; //»ñÈ¡Îļþ±£´æµÄĿ¼
if length(StrSaveFile)=0 then exit; //Èç¹ûĿ¼Ϊ¿Õ£¬ÔòÍ˳ö³ÌÐò
try
screen.Cursor:=crHourGlass; //ÉèÖÃÆÁÄ»µÄÖ¸ÕëÐÍ×´
try //´´½¨Ò»¸öExcel±í¶ÔÏ²¢ÉèÖÃExcel±íÖбêÇ©Ò³µÄÃû³Æ
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(-4167);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Êý¾Ý¿âÊý¾Ý';
Page := ExcelApp.WorkBooks[1].WorkSheets['Êý¾Ý¿âÊý¾Ý'];
j := 1;
except
MessageBox(GetActiveWindow,'ÇëÈ·ÈÏÊÇ·ñ°²×°ÁËMircorsoft Excel¡£','Ìáʾ',MB_OK+MB_ICONINFORMATION);
Exit;
end;
with DbName.DataSource.DataSet do
begin
BM := GetBook; //ÉèÖÃGOTOÑ»·
DisableControls;
//½«TDBGrid±íÖеıêÌâ²åÈëµ½Excel±íÖеÄÊ×ÐÐ
for I:=0 to DbName.Columns.Count-1 do
begin
if DbName.Columns[i].Visible=False then
Continue;
Page.Cells[j,i+1] := DbName.Columns[i].Title.Caption;
Page.Cells[j,i+1].Font.Bold := True; //ÉèÖÃ×ÖÌåΪ´ÖÌå
end;
Inc(j); //Excel±íÖеÄÏÂÒ»ÐÐ
First; //½«Ö¸Õë·µ»Øµ½TDBGrid±íÖÐÊý¾ÝµÄÊ×ÐÐ
while not Eof do
begin
for i:=0 to DbName.Columns.Count-1 do
begin
if DbName.Columns[i].Visible=False then
Continue;
//½«Ö¸¶¨ÐÐÖÐÿÁеÄÊý¾Ý£¬Ìí¼Óµ½Excel±íÖÐ
Page.Cells[j,i+1] := trim(DbName.DataSource.DataSet.Fieldbyname(DbName.Columns[i].FieldName).asstring);
end;
Inc(j); //Excel±íÖеÄÏÂÒ»ÐÐ
Next; //TDBGrid±íÖеÄÏÂÒ»Ìõ¼Ç¼
end;
GotoBook(BM);
FreeBook(BM);
EnableControls;
end;
ExcelApp.activeworkbook.saveas(StrSaveFile); //½«Excel±í±£´æµ½Ö¸¶¨µÄĿ¼ÏÂ
Application.ProcessMessages;
ExcelApp.Application.Quit;
finally
SaveDialog.Free;
screen.Cursor:=crDefault;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
SaveToExcelFile(DbGrid1);
end;
var
ExcelApp: Variant;
Page: Variant;
i, j: Integer;
SaveDialog: TSaveDialog;
BM: TBookMark;
StrSaveFile: string;
begin
if DbName.DataSource.DataSet.IsEmpty then //ÅжÏTDBGrid×é¼þÖÐÊÇ·ñÓÐÊý¾Ý
begin
messagebox(application.Handle,'ûÓÐÈκÎÊý¾Ý,²»ÄܽøÐб£´æ','¾¯¸æ',mb_ok);
abort;
end;
SaveDialog:=TSaveDialog.Create(Nil); //´´½¨Ò»¸öTSaveDialog×é¼þ£¬ÓÃÓÚ±£´æµ¼ÈëµÄÊý¾Ý
SaveDialog.Filter := '*.xls|*.XLS'; //ÉèÖÃÀ©Õ¹ÃûΪxls
SaveDialog.Execute; //´ò¿ª±£´æ¶Ô»°¿ò
StrSaveFile:=SaveDialog.FileName; //»ñÈ¡Îļþ±£´æµÄĿ¼
if length(StrSaveFile)=0 then exit; //Èç¹ûĿ¼Ϊ¿Õ£¬ÔòÍ˳ö³ÌÐò
try
screen.Cursor:=crHourGlass; //ÉèÖÃÆÁÄ»µÄÖ¸ÕëÐÍ×´
try //´´½¨Ò»¸öExcel±í¶ÔÏ²¢ÉèÖÃExcel±íÖбêÇ©Ò³µÄÃû³Æ
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(-4167);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Êý¾Ý¿âÊý¾Ý';
Page := ExcelApp.WorkBooks[1].WorkSheets['Êý¾Ý¿âÊý¾Ý'];
j := 1;
except
MessageBox(GetActiveWindow,'ÇëÈ·ÈÏÊÇ·ñ°²×°ÁËMircorsoft Excel¡£','Ìáʾ',MB_OK+MB_ICONINFORMATION);
Exit;
end;
with DbName.DataSource.DataSet do
begin
BM := GetBook; //ÉèÖÃGOTOÑ»·
DisableControls;
//½«TDBGrid±íÖеıêÌâ²åÈëµ½Excel±íÖеÄÊ×ÐÐ
for I:=0 to DbName.Columns.Count-1 do
begin
if DbName.Columns[i].Visible=False then
Continue;
Page.Cells[j,i+1] := DbName.Columns[i].Title.Caption;
Page.Cells[j,i+1].Font.Bold := True; //ÉèÖÃ×ÖÌåΪ´ÖÌå
end;
Inc(j); //Excel±íÖеÄÏÂÒ»ÐÐ
First; //½«Ö¸Õë·µ»Øµ½TDBGrid±íÖÐÊý¾ÝµÄÊ×ÐÐ
while not Eof do
begin
for i:=0 to DbName.Columns.Count-1 do
begin
if DbName.Columns[i].Visible=False then
Continue;
//½«Ö¸¶¨ÐÐÖÐÿÁеÄÊý¾Ý£¬Ìí¼Óµ½Excel±íÖÐ
Page.Cells[j,i+1] := trim(DbName.DataSource.DataSet.Fieldbyname(DbName.Columns[i].FieldName).asstring);
end;
Inc(j); //Excel±íÖеÄÏÂÒ»ÐÐ
Next; //TDBGrid±íÖеÄÏÂÒ»Ìõ¼Ç¼
end;
GotoBook(BM);
FreeBook(BM);
EnableControls;
end;
ExcelApp.activeworkbook.saveas(StrSaveFile); //½«Excel±í±£´æµ½Ö¸¶¨µÄĿ¼ÏÂ
Application.ProcessMessages;
ExcelApp.Application.Quit;
finally
SaveDialog.Free;
screen.Cursor:=crDefault;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
SaveToExcelFile(DbGrid1);
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货