关于Excel的问题,急死我也!(100分)

  • 主题发起人 主题发起人 Langrisser
  • 开始时间 开始时间
L

Langrisser

Unregistered / Unconfirmed
GUEST, unregistred user!
请看:
procedure TProtocol.BitBtn5Click(Sender: TObject);
var
ExcelApp,MyWorkBook,MyWorkBook1:Variant;
filename: string;
begin
if query1.RecordCount=0 then
raise exception.Create('没有记录可供导出!');

try
ExcelApp:=CreateOleObject('Excel.Application');
except
on Exception do raise exception.Create('请确认您的机器是否已经安装EXCEL。')
end;

filename:='c:/AAA.xls'; //模板文件

ExcelApp.workBooks.Open(filename);
MyworkBook1:=ExcelApp.workBooks[1]; //MyworkBook1存放模板内容
MyWorkBook:=ExcelApp.Workbooks.Add; //MyWorkBook是新文件

...... //这段程序是将模板中的固定内容写入MyWorkBook中

MyworkBook1.Close;

MyWorkBook.WorkSheets[1].Cells[5,3].Value := Query1CNO.Value;
...... //这里是将Query1中当前记录部分字段的值写入MyWorkBook的WorkSheets[1]中


MyWorkBook.WorkSheets[2].Cells[6,2].Value := Query1NOTE.Value;
...... //这里是将Query1中当前记录其他字段的值写入MyWorkBook的WorkSheets[2]中


//保存文件(问题就出在这里)
filename:='d:/BBB.xls';
SaveDialog1.InitialDir:='d:/';
if SaveDialog1.Execute then //按‘确定’时执行这句
begin
filename:=SaveDialog1.FileName;
try
if FileExists(filename) then
DeleteFile(FileName);
MyWorkBook.saveas(filename);
MyWorkBook.close;
beep;beep;
showmessage('导出数据记录执行完毕!');
except
MyWorkBook.close;
end;
end
else MyWorkBook:=Unassigned; //按‘取消’时执行这句

ExcelApp.Quit; //如果在保存时按‘确定’则没问题;如果按‘取消’,则执行这句时弹出一条提示信息:‘文件"book1"已被修改,保存其修改内容吗?’并有'是'、'否'和'取消'三个按钮。
//这时如按'否'则没问题;若仍按'取消',那么在系统中的某一个Excel文件中就会多出一个名为'book1'的WorkBook,并处于未保存的状态。
ExcelApp:=Unassigned;
end;


我期望的情况是:在保存时按‘取消’,不弹出提示信息,而且在Excel中已经写了很多内容的MyWorkBook也自动关闭了,且没保存。
 

MyWorkBook.Close(False, EmptyParam, EmptyParam);
ExcelApp.Quit; //在这句前加入
 
多谢tinytao,问题顺利解决了,不过MyWorkBook.Close(False, EmptyParam, EmptyParam);
要加在MyWorkBook:=Unassigned; 这句前才可以。
还有一个问题想请教各位:
我用上面这种方式将数据导出到Excel中虽然可以,但速度很慢。请问最快的方法是什么,
怎样实现?
 
当然是用现成的控件啦!
我有一个,不过导出的EXECL格式是旧的,凑合着可以用一用。
 
多人接受答案了。
 
后退
顶部