2,497
社区成员
发帖
与我相关
我的任务
分享
uses
DBGridEhImpExp;
function DGExportExcel(DBGridEh: TDBGridEh): boolean;
var
SD:TSaveDialog;
begin
try
Result := False;
SD := TSaveDialog.Create(Application);
SD.Filter := '*.xls(Excel 文档)|*.xls';
if SD.Execute then
begin
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS, DBGridEh, SD.FileName + '.xls', true);
Result := true;
end;
finally
SD.Free;
end;
end;
procedure TF_main.ToExcel(DBGridEh:TDBGridEh);
begin
if SaveDialog_toExcel.Execute then
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS,DBGridEh,SaveDialog_toExcel.FileName,True);
end;
Import/Export TDBGridEh data to/from various formats.
EhLib have set of functions to export data from DBGridEh to Text, Csv, HTML, RTF, XLS and internal formats. It can write data to stream (TStream object) or to file.
Example
Pascal: SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:\temp\file1.txt',False);
C++: SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c:\\temp\\file1.txt",false);
EhLib have set of functions to import data from Text and internal formats to DBGridEh's dataset. It can read data to stream (TStream object) or from file.
uses ComObj;{引用单元}
procedure CopyDbDataToExcel(Args: array of const;F:string);
var
iCount, jCount: Integer;
XLApp: Variant;
Sheet: Variant;
I: Integer;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Add;
XLApp.SheetsInNewWorkbook := High(Args) + 1;
for I := Low(Args) to High(Args) do
begin
XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGridEh(Args[I].VObject).Name;
Sheet := XLApp.Workbooks[1].WorkSheets[TDBGridEh(Args[I].VObject).Name];
if not TDBGridEh(Args[I].VObject).DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;
TDBGridEh(Args[I].VObject).DataSource.DataSet.DisableControls;
TDBGridEh(Args[I].VObject).DataSource.DataSet.first;
for iCount := 0 to TDBGridEh(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[1, iCount + 1] :=
TDBGridEh(Args[I].VObject).Columns.Items[iCount].Title.Caption;
jCount := 1;
while not TDBGridEh(Args[I].VObject).DataSource.DataSet.Eof do
begin
for iCount := 0 to TDBGridEh(Args[I].VObject).Columns.Count - 1 do
Sheet.Cells[jCount + 1, iCount + 1] :=
TDBGridEh(Args[I].VObject).Columns.Items[iCount].Field.AsString;
Inc(jCount);
TDBGridEh(Args[I].VObject).DataSource.DataSet.Next;
end;
XlApp.DisplayAlerts := False;
XlApp.activeworkbook.SaveAs(F);
XlApp.activeworkbook.close;
XlApp.quit;
TDBGridEh(Args[I].VObject).DataSource.DataSet.EnableControls;
end;
Screen.Cursor := crDefault;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
CopyDbDataToExcel([DBGridEh1],SaveDialog1.FileName);
end;