ADOQuery的SavetoFile方法问题(50分)

  • 主题发起人 wuzhonglinquan
  • 开始时间
W

wuzhonglinquan

Unregistered / Unconfirmed
GUEST, unregistred user!
ADOQuery.SavetoFile()的问题,我查了源代码,这个方式只支持两个格式,其中一个是XML,但是我想直接保存成XLS文件(excel文件),如果直接保存XLS文件,打开的时候是乱码。请问,我要怎么做?
 
我是写到DBGrid里,再写入Excel的,感觉直观点,操作也方便些。
 
EXCEL是有特殊格式的文件,不是普通文本文件。
如果要导出XLS,最好像楼上所说写入dbgrid再导出。
我就是用Ehlib的dbgrid导出XLS完全可以使用的。
 
我就是用Ehlib的dbgrid导出XLS完全可以使用的,这个我已经做到了.现在企业要求先保存,后打开的方式,
继续等待......
 
dbgrid.visible设为false就行了啊
 
创建Excel的OLE对像,然后直接写入保存,再从文件中读取
 
给点代码好不?没还没过OLE.
 
{生成EXCEL文件}
Procedure Putexcel(BQ:TDataSet;
PG:TGauge);
overload;
var
tmpstr:string;
i,j:integer;
app,sheet:variant;
SD:TSaveDialog;
begin
if not bq.Active then
exit;
try
App:=CreateOleObject('Excel.Application');
Sheet:=CreateOleobject('Excel.Sheet');
except
ShowMessage('您的机器里未安装Microsoft Excel!');
exit;
end;
sd:=TSaveDialog.Create(nil);
try
if sd.Execute then
tmpstr:=sd.FileName
else
begin
sheet.close;
App.Quit;
App:=Unassigned;
exit;
end;
sheet:=App.workBooks.Add;
for i:=1 to BQ.FieldCountdo
begin
if bq.Fields[i-1].Tag<>99 then
App.Cells(1 , i):=bq.Fields[i-1].DisplayLabel;
end;
j:=2;
with bqdo
begin
last;
pg.MaxValue:=RecordCount;
first;
while not eofdo
begin
for i:=1 to FieldCountdo
begin
if Fields[i-1].tag<>99 then
begin
if (Fields[i-1].tag=1)and(Fields[i-1].DataType in [ftString,ftWideString]) then
App.Cells(j,i):=''''+Fields[i-1].AsString
else
App.Cells(j,i):=Fields[i-1].AsString;
end;
end;
inc(j);
next;
pg.AddProgress(1);
end;
end;
sheet.saveas(tmpstr);
sheet.close;
App.Quit;
App:=Unassigned;
pg.Progress:=0;
finally
sd.Free;
end;
end;
 
楼上正确,加满分.谢谢,对你的稍微修改了,完全满足了我的需要.
 
我想加分给你,可总加不了.
 
多人接受答案了。
 
顶部