Ole 操作Excel 时 如何关闭 Excel 进程

gxd305 2005-11-05 06:47:19
Variant v=Variant::CreateObject("Excel.Application");
v.OlePropertyGet("WorkBooks").OleProcedure("Open","c:\\temp.xls");
Variant Wb=v.OlePropertyGet("ActiveWorkBook");
AnsiString str= "c:\\temp1.xls";
Wb.OleProcedure("SaveAs","c:\\temp1.xls");
Wb.OleProcedure("Close");
//v.OleProcedure("Exit");
v = Unassigned;
Wb= Unassigned;

这样操作Excel 完成后Excel这个进程不会退出
如何退出呢?
...全文
869 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucho 2006-04-06
  • 打赏
  • 举报
回复
指针释放是把指针赋值为 NULL
这里只要把变量赋值为 Unassigned 就可以了。
Persistent8813 2006-03-23
  • 打赏
  • 举报
回复
可能我说的不清楚,
就是有的机器上
不有这句:vSheet = Unassigned;
vExcelApp = Unassigned; 这句就报错

有的机器上没事
Persistent8813 2006-03-23
  • 打赏
  • 举报
回复
为什么有的机器上不关闭活动页就不能退出EXCEL进程,而有的机器却可以退出??我刚遇到,真怪啊
zuojianyou 2006-03-21
  • 打赏
  • 举报
回复
// 保存Excel文档
vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("SaveAs", ls_FileName.c_str());
//vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;

后面两句就可以了!
e170 2006-03-18
  • 打赏
  • 举报
回复
我也出现了关不掉的问题所以我干脆就KILL掉EXCEL的进程
hochaoqun 2006-03-14
  • 打赏
  • 举报
回复
我用的是跟wf2091139一样的方法,很顺利地关掉进程,我想,可能是你在程序中间还用到了其它的ole万能变量,所有的都要赋Unassigned
wf2091139 2006-02-14
  • 打赏
  • 举报
回复
前2天正好也在做这个,遇到同样的问题
像楼主的所说的,读、写excel都没有问题,可是最后退出我用了下面代码,可是进程依然关不掉

#define OPG OlePropertyGet
#define OPS OlePropertySet
#define OFN OleFunction
#define OPR OleProcedure
#define PR Procedure

......

Variant Axl,Workbook,AxSheet;

......

Workbook.OPR("Close");
Axl.OFN("Quit");
Axl=Unassigned;
Workbook=Unassigned;
AxSheet=Unassigned;

//程序运行无错,但手工打开那个excel时,出现提示,选择“只读” “通知” 等,
//应该就是上一个进程未关掉。

//希望知道的指点指点。
sczyq 2006-02-14
  • 打赏
  • 举报
回复
v = NULL;
study_c_yumiao 2006-02-08
  • 打赏
  • 举报
回复
不知下面这段信息,对你是否有帮助。

#define OPG OlePropertyGet
#define OPS OlePropertySet
#define OFN OleFunction
#define OPR OleProcedure
#define PR Procedure



{
Variant exapp,exbook,exsheet;

try
{
exapp= Variant::CreateObject("Excel.Application");
}
catch(...)
{
MessageBox(Handle,"无法启动 Excel.!","提示",MB_ICONSTOP|MB_OK);
return;
}


//结束退出
exbook.OPR("Close");
exapp.OFN("Quit");
//结束,如果没有如下代码,EXCEL线程直到应用程序退出才结束。
exapp=Unassigned;
exbook=Unassigned;
exsheet=Unassigned;
Application->MessageBoxA("导出完成.!","提示",MB_OK);
}
xjluogang 2005-11-17
  • 打赏
  • 举报
回复
可以参考如下的方法:

//在头文件中定义一些宏
//定义Excel宏
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure

//在具体程序中操作
Variant V,WorkBook1,Sheet1,cell;
try
{
AnsiString Path ="*:\\***\\***.xls";

V = Variant::CreateObject("Excel.Application"); //建立Excel对象
V.PS("Visible",false); // "Sichtbar" == "Visible"
V.PG("Workbooks").FN("open",Path.c_str());
WorkBook1 = V.PG("ActiveWorkBook");
int nSheetCount = WorkBook1.PG("Sheets").PG("Count"); //总的工作表数量
WorkBook1.PG("Sheets",nSheetCount).PR("Select"); //选择最后一个工作表
Sheet1 =WorkBook1.PG("ActiveSheet");
AnsiString ss =DateToStr(Now()-1);
Sheet1.PS("Name",ss.c_str()); //设置当前工作表的名称

//int nColumnsCount =Sheet1.PG("UsedRange").PG("Rows").PG("Count"); //总行数
//int nRowsCount =Sheet1.PG("UsedRange").PG("Columns").PG("Count"); //总列输
//....Something.....
//..................

WorkBook1.FN("Save");
V.FN("Quit"); // Quit
V = Unassigned; //退出Excel进程
}catch(...)
{
R =0;
V.FN("Quit"); // Quit
V = Unassigned; //退出Excel进程
}
ccrun.com 2005-11-11
  • 打赏
  • 举报
回复
恩。那就加个
vExcelApp.OlePropertySet("DisplayAlerts", false);
让其忽略警告。
chenzhou851025 2005-11-11
  • 打赏
  • 举报
回复
老妖大哥的方法好象不行,它会提示你要不要保存已经修改的excel文件,具体的实现方法我还没做出来,先学习一下
ccrun.com 2005-11-05
  • 打赏
  • 举报
回复
v.OleFunction("Quit");

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧