我们一般都让用户自己选择应该打印的字段及条件,然后设置导出文件类型,
一般是EXCEL格式,然后由用户自己设定样式。
//导出成为excel子程序
Procedure TFrm_OutType.OutToExcel;
var
i,j:integer;
TheString,str:string;
aqryx:tadoquery;
begin
//创建一excel应用对象,并添加一excel工作簿
App:=CreateOleObject('Excel.application');
MyWorkBook:=CreateOleobject('Excel.Sheet');
App.Visible:=true;
App.Caption:='导出数据';
MyworkBook:=App.workBooks.Add;
//开始联接
aqryx:=tadoquery.Create(nil);
aqryx.Connection:=DataModule1.ADS_InData.Connection;
//开始导出
with Datamodule1do
begin
//将要导出的数据集的游标置到第一条
DataModule1.ADS_InData.close;
DataModule1.ADS_InData.open;
DataModule1.ADS_InData.first;
//字段名
for j:=1 to DataModule1.ADS_InData.Fields.Countdo
begin
//从字段表中查找相应中文名称
aqryx.Close;
aqryx.SQL.Clear;
aqryx.SQL.Add('select * from tb_TableField where english='+''''+DataModule1.ADS_InData.Fields[j-1].DisplayName+'''');
aqryx.Open;
aqryx.First;
str:=aqryx.FieldByName('chinese').AsString;
if aqryx.RecordCount=0 then
App.cells[1,j]:=DataModule1.ADS_InData.Fields[j-1].DisplayName
else
App.cells[1,j]:=str;
end;
aqryx.Free;
i:=2;//excel的第一行为字段名,第二行开始为所有记录
//导出记录
While DataModule1.ADS_InData.Eof=falsedo
begin
for j:=0 to DataModule1.ADS_InData.Fields.Count-1do
with DataModule1.ADS_InDatado
case Fields[j].DataType of {根据字段的类型自动转换}
ftString:begin
if DataModule1.ADS_InData.Fields[j].CurValue<>null then
TheString:=''''+DataModule1.ADS_InData.Fields[j].CurValue
else
TheString:='''';
App.cells[i,j+1]:=TheString;
end;
else
App.cells[i,j+1]:= DataModule1.ADS_InData.Fields[j].CurValue;
end;
i:=i+1;
DataModule1.ADS_InData.Next;
end;
end;
end;