unit DBGrdToExcel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB,ComObj, ExtDlgs, DBGridEhImpExp,
GridsEh, DBGridEh;
procedure DBGrid_To_Excel(DbgridName:TDBGrid);
procedure DBGriehd_To_Excel(DbgridName:TDBGridEh);
implementation
//------ 打印 ------------
procedure DBGrid_To_Excel(DbgridName:TDBGrid); //TDbGrid
var
ExcelApp : Variant;
ExcelData : string;
i, j ,m : integer;
begin
try
ExcelApp:= CreateOleObject('Excel.Application');
except
Application.MessageBox('请检查是否安装有Microsoft Excel', '警告', mb_OK);
end;
try
ExcelApp.Visible := true;
ExcelApp.Caption := '应用程序调用 Microsoft Excel';
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets[1].Activate;
m := 1;
for i := 1 to DbgridName.Columns.Count do
begin
if DbgridName.Columns[i - 1].Visible then
begin
ExcelData := DbgridName.Columns[i - 1].Title.Caption;
ExcelApp.Cells[1, m].Value := ExcelData;
application.ProcessMessages;
inc(m);
end;
end;
// 空数据 DbgridName---------------------------------
if DbgridName.DataSource.DataSet.IsEmpty then exit;
DbgridName.DataSource.DataSet.DisableControls;
DbgridName.DataSource.DataSet.First;
j := 2;
while not DbgridName.DataSource.DataSet.Eof do
begin
m := 1;
for i := 1 to DbgridName.Columns.Count do
begin
//(DbgridName.Columns[i-1].FieldName <> '') FieldName 为空
if DbgridName.Columns[i - 1].Visible and (DbgridName.Columns[i-1].FieldName <> '') then
begin
application.ProcessMessages;
ExcelData:=DbgridName.DataSource.DataSet.FieldByName(DbgridName.Columns[i-
1].FieldName).asstring;
ExcelApp.Cells[j, m].Value := ExcelData;
inc(m);
end;
end;
DbgridName.DataSource.DataSet.Next;
j := j + 1;
end;
DbgridName.DataSource.DataSet.EnableControls;
except
Application.MessageBox('记录输出失败!', '警告', mb_OK);
ExcelApp.Quit;
end;
end;
//------ 打印 ------------
procedure DBGriehd_To_Excel(DbgridName:TDBGridEh);
var
ExcelApp : Variant;
ExcelData : string;
i, j ,m : integer;
begin
try
ExcelApp:= CreateOleObject('Excel.Application');
except
Application.MessageBox('请检查是否安装有Microsoft Excel', '警告', mb_OK);
end;
try
ExcelApp.Visible := true;
ExcelApp.Caption := '应用程序调用 Microsoft Excel';
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets[1].Activate;
m := 1;
for i := 1 to DbgridName.Columns.Count do
begin
if DbgridName.Columns[i - 1].Visible then
begin
ExcelData := DbgridName.Columns[i - 1].Title.Caption;
ExcelApp.Cells[1, m].Value := ExcelData;
application.ProcessMessages;
inc(m);
end;
end;
// 空数据
if DbgridName.DataSource.DataSet.IsEmpty then exit;
DbgridName.DataSource.DataSet.DisableControls;
DbgridName.DataSource.DataSet.First;
j := 2;
while not DbgridName.DataSource.DataSet.Eof do
begin
m := 1;
for i := 1 to DbgridName.Columns.Count do
begin
if DbgridName.Columns[i - 1].Visible and (DbgridName.Columns[i-1].FieldName <> '') then
begin
application.ProcessMessages;
ExcelData:=DbgridName.DataSource.DataSet.FieldByName(DbgridName.Columns[i-
1].FieldName).asstring;
ExcelApp.Cells[j, m].Value := ExcelData;
inc(m);
end;
end;
DbgridName.DataSource.DataSet.Next;
j := j + 1;
end;
DbgridName.DataSource.DataSet.EnableControls;
except
Application.MessageBox('记录输出失败!', '警告', mb_OK);
ExcelApp.Quit;
end;
end;
end.