我准备做一个下面功能:
提供dbgrid的导入导出功能,针对管理系统中每一张表或sql查询,均可以可选择字段(项目)及筛选条件批量地导出,并根求能支持多种格式(比如:txt,dbf,Excel,csv等等).
但dbgrid控件和DataSet组件都没有提供savetofile之类的函数.我记得以前用PB编程时,实现很方便,利用数据窗口的saveas()和import()就可以了并且支持数十种格式!!!难道delphi就没有类似的方法或者第三方控件也行.
提供dbgrid的导入导出功能,针对管理系统中每一张表或sql查询,均可以可选择字段(项目)及筛选条件批量地导出,并根求能支持多种格式(比如:txt,dbf,Excel,csv等等).
但dbgrid控件和DataSet组件都没有提供savetofile之类的函数.我记得以前用PB编程时,实现很方便,利用数据窗口的saveas()和import()就可以了并且支持数十种格式!!!难道delphi就没有类似的方法或者第三方控件也行.
我是想大家讨论出个解决方案来,对于常用格式.
var
i,row,column:integer;
ExcelApplication1: TExcelApplication;
ExcelWorkbook1 : TExcelWorkbook;
ExcelWorksheet1 : TExcelWorksheet;
begin Try ExcelApplication1 := TExcelApplication.Create(self);
ExcelApplication1.Connect;
ExcelWorkbook1 := TExcelWorkbook.Create(self);
ExcelWorksheet1 := TExcelWorksheet.Create(self);
Except
application.MessageBox('请先安装 Excel97 或 Excel2000 !','提示信息',mb_ok+mb_iconinformation);
Abort;
End;
try
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Caption:=S;
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkbook1.ConnectTo
(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo
(ExcelWorkbook1.Worksheets[1] as _Worksheet);
ExcelWorksheet1.Cells.Item[1,4]:=S; //写入标题
row:=3;
column:=1;
for i:=1 to DBGrid1.FieldCount do
if DBGrid1.Columns[i-1].Visible then
begin
ExcelWorksheet1.Cells.NumberFormatLocal:='@';
ExcelWorksheet1.Cells.Item[row,column]:=DBGrid1.Columns[i-1].Title.Caption;
column:=column+1;
end; //写入目录
row:=row+1;
DBGrid1.DataSource.DataSet.First;
While Not(DBGrid1.DataSource.DataSet.Eof) do
begin
column:=1;
for i:=1 to DBGrid1.FieldCount do
if DBGrid1.Columns[i-1].Visible then
begin
ExcelWorksheet1.Cells.NumberFormatLocal:='@';
ExcelWorksheet1.Cells.Item[row,column]:=DBGrid1.Fields[i-1].AsString;
column:=column+1;
end;
row:=row+1;
DBGrid1.DataSource.DataSet.Next; //写入内容
end;
finally
ExcelWorkbook1.Disconnect;
ExcelWorksheet1.Disconnect;
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Free;
end;
end;