我在delphi中通过ole调用excel,一切正常,调用成功,但我怎样将创建的对象消来掉呢?(100分)

  • 主题发起人 主题发起人 SUB
  • 开始时间 开始时间
S

SUB

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是如下代码:
var
Excel,Sheet:Variant;
I,J,X,Y:Integer;
begin
Try
Excel:=UnAssigned;
Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=False;
Excel.WorkBooks.Add;
Except
Excel:=UnAssigned;
DispInfo('本机未安装EXCEL,本功能必须在安装有EXCEL的电脑上才能运行!',1);
Abort;
End;
if VarIsEmpty(Excel) then
begin
DispInfo('建立Excel对象不成功,请重试!',1);
Excel:=UnAssigned;
Abort;
end;
X:=DbGridEh.FrozenCols;
DbGridEh.FrozenCols:=0;//设置锁定列为0
J:=0;
For I:=0 To DbGridEh.Columns.Count-1 Do
Begin
If DbGridEh.Columns.Visible Then
J:=J+1;
End; //取得显示列总列数
I:=Round(J/2);
sheet:=Excel.worksheets[1];
Sheet.Name:=TForm(DbGridEh.Parent.Parent).caption;
Sheet.Cells[1,I]:=TForm(DbGridEh.Parent.Parent).caption;
sheet.cells[2,1]:='日期:'+FormatDateTime('yyyy"年"mm"月"dd"日"',Now);
Sheet.Cells[2,J-1]:='制表:'+UserCode; //以上为表头输出
J:=1;
For I:=0 To DbGridEh.Columns.Count-1 Do
If DbGridEh.Columns.Visible Then
begin
Sheet.Cells[3,J]:=DbGridEh.Columns.Title.Caption; //设置列标题
J:=J+1;
end;
If Not DbGridEh.DataSource.DataSet.Active Then
Begin
Excel.Quit;
Excel:=UnAssigned;
Abort;
End;
Try
With DbGridEh.DataSource.DataSet Do
Begin
First;
I:=4; //行记数
While Not Eof Do
Begin
Y:=1;
For J:=0 To DbgridEh.Columns.Count-1 Do //列记数
begin
If DbGridEh.Columns[J].Visible Then
begin
If DbgridEh.Columns[J].PickList.Count>0 Then
Sheet.Cells[I,Y]:=DbGridEh.Columns[J].PickList.Strings[DbGridEh.Columns[J].KeyList.IndexOf(FieldByName(DbGridEh.Columns[J].FieldName).AsString)]
Else
If FieldByName(DbGridEh.Columns[J].FieldName).DataType=FtDateTime Then
Sheet.Cells[I,Y]:=FormatDateTime('yyyy.mm.dd',FieldByName(DbGridEh.Columns[J].FieldName).AsDateTime)
Else
Sheet.Cells[I,Y]:=FieldByName(DbGridEh.Columns[J].FieldName).AsString;
Y:=Y+1;
end;
end;
I:=I+1;
Next;
End;
End;
Finally
DbGridEh.FrozenCols:=X;
Excel.Visible:=True;
Excel.Quit;//控制Excel退出
Excel:=UnAssigned;
End;
在程序执行到( Excel.Quit;//控制Excel退出)时,Excel窗口便提示Excel
"的文本已经改变,是否保存?"如果不让这个提示出现,并且不关闭Excel对象
应该怎样办呢?请各位大虾指点?
 
>>如果不让这个提示出现,并且不关闭Excel对象应该怎样办呢?

不关闭EXCEL,你QUIT干什么
 
看了你的代码半天,也不知道你在什么地方打开文件的。
打开EXCEL文件时,要有只读方式打开就可以。我用的是D5自身的控件打开EXCEL的
这是打开文件时的过程
try
Excel_Book.ConnectTo(Excel_App.Workbooks.Open
(ExcelFile,
EmptyParam,
ReadOnly, //注意这个参数
EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0));
Excel_Sheet.ConnectTo(Excel_Book.Activesheet as _Worksheet);
except;
end;

以上,不知能不能帮你。
 
;指定一个临时文件名,用
Excel.ActiveSheet.SaveAs(xlsFileName)进行保存。
但是如果此文件已经存在的话,还会有提示,所以在存前要查找一下,如果有先删除。
至于不关闭Excel,只要不用Quit就可以啦。
 
这是我在开发ExcelReport控件中整理的一份:我写一个控件
里面其中有两个文法:OpenExcelFile() ,FillData;

1.打开Excel97
Try
ExcelApplicatio.Connect;
Except
Showmessage('无检查到Excel,确认有安装');
 exit;
end;

ExcelApplication.Visible[0]:=True;
2.增加一个WorkBook
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.add(null,0));
或分两步:
ExcelApplication1.Workbooks.Add(null,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.WorkBooks[1]);
3.添加一个WorkSheet
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _WorkSheet);
或分两步:(其中定义Temp_Worksheet为_workSheet类型)
Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)
as _WorkSheet;//(注意)
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
4.退出Excel
try
ExcelApplication.Quit;
ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication.Disconnect;
Except
end;


有时重新打开*.Xls文件时,你只需要在你转出数据完毕后,加入如下语句即可
ExcelApplication1.ScreenUpdating[0]:=true;
 
噢,差点忘了,你出现的问题,可以在重建对象时用
if VarIsEmpty(vApplication) then
begin
vApplication := CreateOleObject('Excel.Application');
vApplication.Visible :=False;
end
else begin
try
vWorkBook :=vApplication.WorkBooks[1];
except
vApplication := CreateOleObject('Excel.Application');
vApplication.Visible := False;
end;//end Try
end;//end else
 
多人接受答案了。
 
后退
顶部