必须uses DBGridEhImpExp, EhlibADO, DBGridEh
第一种:
procedure TForm2.dbgridehtoexp(lsdbgrideh: tdbgrideh; Title: string); //lsdbgrideh传入dbgrideh变量;Title保存标题
var
ExpClass: TDBGridEhExportClass;
Ext: string;
sd1: tsavedialog;
begin
try
sd1 := tsavedialog.Create(nil);
sd1.Filter := '*.xls|*.xls|*.csv|*.csv|*.htm|*.htm|*.rtf|*.rtf|*.txt|*.txt';
sd1.FileName := Title;
if sd1.Execute then
begin
case sd1.FilterIndex of
1:
begin
ExpClass := TDBGridEhExportAsText;
Ext := 'xls';
end;
2:
begin
ExpClass := TDBGridEhExportAsCSV;
Ext := 'csv';
end;
3:
begin
ExpClass := TDBGridEhExportAsHTML;
Ext := 'htm';
end;
4:
begin
ExpClass := TDBGridEhExportAsRTF;
Ext := 'rtf';
end;
5:
begin
ExpClass := TDBGridEhExportAsXLS;
Ext := 'txt';
end;
else
ExpClass := nil;
Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(sd1.FileName, Length(sd1.FileName) - 2, 3)) <> UpperCase(Ext) then
sd1.FileName := sd1.FileName + '.' + Ext;
if FileExists(sd1.FileName) then
begin
if application.MessageBox('文件名已存在,是否覆盖', '提示', MB_ICONASTERISK or MB_OKCANCEL) <> idok then
begin
exit;
end;
end;
Screen.Cursor := crHourGlass;
SaveDBGridEhToExportFile(ExpClass, lsDBGridEh, sd1.FileName, true);
Screen.Cursor := crDefault;
end;
end;
finally
sd1.Free;
end;
end;
第二种:
procedure TForm2.GridSaveAS(grid: TDBGridEh);
var
ExpClass: TDBGridEhExportClass;
Ext: string;
SaveDlg: TSaveDialog;
ExportAll: Boolean;
begin
ExportAll := True; //缺省情况下导出所有数据
SaveDlg := TSaveDialog.Create(Application);
SaveDlg.Filter := 'Excel表格(*.XLS)|*.XLS|HTML文档(*.HTM)|*.HTM|RTF格式(*.RTF)|*.RTF|纯文本文件(*.TXT)|*.TXT|逗号分隔文本格式(*.CSV)|*.CSV';
SaveDlg.FileName := '未命名';
SaveDlg.Options := [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing];
if SaveDlg.Execute then
begin
case SaveDlg.FilterIndex of
1:
begin
ExpClass := TDBGridEhExportAsXLS;
Ext := 'xls';
end;
2:
begin
ExpClass := TDBGridEhExportAsHTML;
Ext := 'htm';
end;
3:
begin
ExpClass := TDBGridEhExportAsRTF;
Ext := 'rtf';
end;
4:
begin
ExpClass := TDBGridEhExportAsText;
Ext := 'txt';
end;
5:
begin
ExpClass := TDBGridEhExportAsCSV;
Ext := 'csv';
end;
else
ExpClass := nil;
Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(SaveDlg.FileName, Length(SaveDlg.FileName) - 2, 3)) <>
UpperCase(Ext) then
SaveDlg.FileName := SaveDlg.FileName + '.' + Ext;
//如果grid中有选择的区域,则只导出所选择的区域
if grid.Selection.SelectionType <> gstNon then ExportAll := False;
try
SaveDBGridEhToExportFile(ExpClass, grid, SaveDlg.FileName, ExportAll);
except
on E: Exception do
begin
MessageBox(0, LPCTSTR('保存文件发生异常,请检查是否有重名文件并且该文件没有被打开!'), '注意', MB_OK or MB_ICONWARNING);
Exit;
end;
end;
end;
end;
end;
第三种:
function DBGridEhToExportFile(dbgrideh:TDBGridEh;filename:string='导出的文件'):boolean ;
var ExpClass:TDBGridEhExportClass;
Ext:String;
sd1:tsavedialog;
begin
result:=True ;
sd1:=tsavedialog.Create(nil);
sd1.Filter:='Excel 文件(*.xls)|*.xls|分隔符格式(*.csv)|*.csv|Html文件(*.htm)|*.htm|WORD 文件(*.rtf)|*.rtf|文本文件(*.txt)|*.txt';
sd1.FileName:=filename;
if (dbgrideh is TDBGridEh) then
if sd1.Execute then
begin
case sd1.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsText; Ext := 'xls'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'txt'; end;
else
ExpClass := nil; Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(sd1.FileName,Length(sd1.FileName)-2,3)) <>
UpperCase(Ext) then
sd1.FileName := sd1.FileName + '.' + Ext;
if FileExists( sd1.FileName) then
begin
if application.MessageBox('文件已存在,替换?','提示',mb_yesno+mb_defbutton1+mb_iconquestion+mb_systemmodal)=idyes then
begin
if DeleteFile( sd1.FileName)=false then
begin
showmessage(filename+'文件正在使用,无法替换.'+chr(13)+chr(10)+'请关闭文件:'+sd1.FileName+'.在重新导入。');
result:=false;
exit;
end;
end;
end;
SaveDBGridEhToExportFile(ExpClass,TDBGridEh(dbgrideh), sd1.FileName,true); //改为false 只导出选择行
end;
end
else
begin
result:=false;
end;
sd1.Free ;
end;