我导入数据的代码如下,你看有什么问题吗?请指教。 procedure TForm1.Button3Click(Sender: TObject); var xlsapp,xlssheet:variant; i,j:integer; begin try if varisempty(xlsapp) then xlsapp:=createoleobject('excel.application'); xlsapp.workbooks.add; xlssheet:=xlsapp.worksheets['sheet1']; except application.MessageBox('不能打开EXCEL',pchar('警告'),mb_ok); abort; end; for j:=0 to query1.FieldCount-1 do begin xlssheet.cells[1,j+1]:=query1.Fields[j].FieldName; end; with query1 do begin first; for i:=0 to recordcount-1 do begin for j:=0 to fieldcount-1 do begin xlssheet.cells[i+3,j+1]:=fields[j].AsString; end; next; end; end; xlsapp.visible:=true; end;
创建一个对必,用完后必须释放xlsapp.Quit;
我把xlsapp.quit;放在xlsapp.visible:=true; 后面,还是不行啊,MY GOD 我要疯了,救命啊~~~~~~~!
xlsapp.free 加进去看看。 给你一段源程序,参考一下。稍等
话题517256的标题是: 关于Excel的问题,急死我也! (100分) 分类:OLE/Automation Langrisser (2001-4-27 12:18:00) 请看: 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也自动关闭了,且没保存。 tinytao (2001-4-27 13:01:00) MyWorkBook.Close(False, EmptyParam, EmptyParam); ExcelApp.Quit; //在这句前加入 Langrisser (2001-4-27 13:31:00) 多谢tinytao,问题顺利解决了,不过MyWorkBook.Close(False, EmptyParam, EmptyParam); 要加在MyWorkBook:=Unassigned; 这句前才可以。 还有一个问题想请教各位: 我用上面这种方式将数据导出到Excel中虽然可以,但速度很慢。请问最快的方法是什么, 怎样实现?
我导入数据的代码如下,你看有什么问题吗?请指教。
procedure TForm1.Button3Click(Sender: TObject);
var
xlsapp,xlssheet:variant;
i,j:integer;
begin
try
if varisempty(xlsapp) then
xlsapp:=createoleobject('excel.application');
xlsapp.workbooks.add;
xlssheet:=xlsapp.worksheets['sheet1'];
except
application.MessageBox('不能打开EXCEL',pchar('警告'),mb_ok);
abort;
end;
for j:=0 to query1.FieldCount-1 do
begin
xlssheet.cells[1,j+1]:=query1.Fields[j].FieldName;
end;
with query1 do
begin
first;
for i:=0 to recordcount-1 do
begin
for j:=0 to fieldcount-1 do
begin
xlssheet.cells[i+3,j+1]:=fields[j].AsString;
end;
next;
end;
end;
xlsapp.visible:=true;
end;
给你一段源程序,参考一下。稍等
分类:OLE/Automation Langrisser (2001-4-27 12:18:00)
请看:
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也自动关闭了,且没保存。
tinytao (2001-4-27 13:01:00) MyWorkBook.Close(False, EmptyParam, EmptyParam);
ExcelApp.Quit; //在这句前加入
Langrisser (2001-4-27 13:31:00)
多谢tinytao,问题顺利解决了,不过MyWorkBook.Close(False, EmptyParam, EmptyParam);
要加在MyWorkBook:=Unassigned; 这句前才可以。
还有一个问题想请教各位:
我用上面这种方式将数据导出到Excel中虽然可以,但速度很慢。请问最快的方法是什么,
怎样实现?
hclee (2001-4-27 14:59:00)
当然是用现成的控件啦!
我有一个,不过导出的EXECL格式是旧的,凑合着可以用一用。