Excel的无法第2次调用的问题 先谢谢了 都看看吧 找了很多地方都没人知道(100分)

J

janixd

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序利用EXCEL做报表 将数据写入EXCEL 用的是ExcelApplication这个控件
问题是 当我第一次写入数据时 很正常 当我保存后 关闭Excel 然后再次在程序中将数据写入Excel时 Excel只能看见工具栏以上的 下面的工作区都没有了 但是数据仍然写进去了 保存文件 然后关掉我做的软件才能看到 不关的话看不到工作区 先谢谢大家帮我!
 
??没有试过,不过我最近也在和excel 打交道,可以交流
 
什么系统?
OFFICE版本?
代码贴出来
 
xp的 Try
ExAp1.Connect;
Except
MessageDlg('Excel may not be installed',
mtError, [mbOk], 0);
Abort;
end;
datamodule1.Table1.Active:=true;
ExAp1.Visible[0]:=True;
ExAp1.Caption:='Excel Application';
try
exap1.Workbooks.Open(extractfilepath(application.ExeName)+'report/Book11.xls',
null,null,null,null,null,null,null,null,null,null,null,null,null,null,0);
//打开指定的EXCEL 文件
except
begin
ExcelApplication1.Disconnect;//出现异常情况时关闭
ExcelApplication1.Quit;
showmessage('请选择EXCEL电子表格!');
exit;
end;
end;
ExlWbk1.ConnectTo(ExAp1.Workbooks[1]);
Exlwsh1.ConnectTo(ExlWbk1.Worksheets[1] as _Worksheet);
row:=10;
datamodule1.Table1.Active:=true;
datamodule1.Table1.First;
for i:=1 to datamodule1.Table1.RecordCountdo
if i <= (datamodule1.Table1.RecordCount div 2) then
begin
ExlWsh1.Cells.Item[row,1] := i;
inc(row);
datamodule1.Table1.next;
end
else
begin
ExlWsh1.Cells.Item[(row-(datamodule1.Table1.RecordCount div 2)),8] := i;

inc(row);
datamodule1.Table1.next;
end;
exlwsh1.SaveAs(extractfilepath(application.ExeName)+'report/'+treeview1.Selected.Parent.Text+'.xls');
end;
 
估计是Excel进程没有完全关闭,所以第二次Excel界面看不到。
你试试看,第一次做完后(关闭Excel进程),看看进程里面是不是有excel进程。
别告诉我你没有关闭excel。
 
对的 让人感觉就是进程没关一样 可是应该是关了 进程也没看到 我用了EXCELAPPLICATION.quit都没用 如果没关 应该怎么关呢
 
而且当我的程序掉用一次EXCEL后 不关程序时 单独打开excel文档 也是看不到工作区
 
应该怎么关呢
 
请参考
http://study.99net.net/study/program/delphi/1085477174.html

先关闭工作表,在关闭EXCEL,试下
WorkBook.close;
EXCELAPPLICATION.quit
 
哎呀 也不行啊 真是奇怪了 这个命令就是把我的报表文件关了 可是我在打开的时候还是不行 哦 感觉就象是工作区没激活 好像隐藏了
 
我都是用disconnect搞定的.
數據寫入完成後:用以下代碼:
execelworksheet1.disconnect
execelworkbook1.disconnect
execelapplication1.disconnect
 
吐血了 也不行 晕死人了[:(] 不过也很感谢各位 我还是等
 
一定要等到 呵呵
 
晕 没人知道吗
 
帮你顶一把
 
ExcelID.quit;
ExcelID :=unassigned;
ExcelID :=null;
ExcelApplication1.Visible:=False;
ExcelApplication1.Close;
ExcelApplication1.Quit;

全部用上,看看行不行 :)
 
加上 ExcelApp := Unassigned;即可
 
晕死 还是不行哦 奇怪 啊
 
把你的代码简化下帖出来
1、打开
2、操作一条记录
3、保存关闭
 
try
v:= CreateOleObject('Excel.Application');
except

Showmessage('初始化Excel失败,可能没装Excel,或者其他错误;请重起再试。');
v.DisplayAlerts := false;
v.Quit;
exit;
end;
try
v.Visible := false;
v.workbooks.open(opendialog1.FileName);
except
Showmessage('请选择EXCEL电子表格!');
v.quit;
exit;
end;

Sheet:= v.Workbooks[1].WorkSheets[1];
for i := 1 to 200do
if Sheet.Cells.Item[i,1]
then
inc(num);
for j := 1 to numdo
begin
if Sheet.cells.item[j,1] then
begin
with datamodule1.Table1do
begin
Edit;
Append;
FieldByName('number').Asstring:=inttostr(j);
end;
v.Quit;
用这个代码的时候 我解决了自己程序当中第二次打开excel文件无法显示的问题 但是如果我的程序打开而不用自己程序调用excel 而单独打开excel文件时 excel文件工作区就不可见
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部