VC 打开 Excel 文件后,excel.exe进程无法退出
2016-09-07 09:05
429 查看
测试代码:
vc6.0
office2000
以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP
Quit之前
SetUserControl(FALSE);
vc6.0
office2000
以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP
_Application ExcelApp; Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Worksheet wsMysheet; Range range; LPDISPATCH lpDisp; //创建Excel 2000服务器(启动Excel) COleVariant vResult; COleVariant covTrue((short)TRUE); COleVariant covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CoInitialize(NULL); if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) { AfxMessageBox("创建Excel服务失败!"); exit(1); } ExcelApp.SetVisible(TRUE); //使Excel可见 ExcelApp.SetUserControl(TRUE); //允许其它用户控制Excel //打开c:\\aaa.xls wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks()); lpDisp = wbsMyBooks.Open("C:\\aaa.xls", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional ); //得到Workbook wbMyBook.AttachDispatch(lpDisp); //得到Worksheets wssMysheets.AttachDispatch(wbMyBook.GetWorksheets()); //得到当前活跃sheet //如果有单元格正处于编辑状态中,此操作不能返回,会一直等待 lpDisp=wbMyBook.GetActiveSheet(); wsMysheet.AttachDispatch(lpDisp); //***** //读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列 Range usedRange; usedRange.AttachDispatch(wsMysheet.GetUsedRange()); range.AttachDispatch(usedRange.GetRows()); long iRowNum=range.GetCount(); //已经使用的行数 range.AttachDispatch(usedRange.GetColumns()); long iColNum=range.GetCount(); //已经使用的列数 long iStartRow=usedRange.GetRow(); //已使用区域的起始行,从1开始 long iStartCol=usedRange.GetColumn(); //已使用区域的起始列,从1开始 for (long i=iStartRow; i<iRowNum+1; i++) { for (long j=iStartCol; j<iColNum+1; j++) { range.AttachDispatch(wsMysheet.GetCells()); range.AttachDispatch(range.GetItem (COleVariant((long)i),COleVariant((long)j)).pdispVal ); vResult =range.GetValue(); CString str; if(vResult.vt == VT_BSTR) //字符串 { str=vResult.bstrVal; } else if (vResult.vt==VT_R8) //8字节的数字 { str.Format("%f",vResult.dblVal); } else if(vResult.vt==VT_DATE) //时间格式 { SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); } else if(vResult.vt==VT_EMPTY) //单元格空的 { str=""; } if (str.Find("44") != -1) { AfxMessageBox(str); } } } /***** //读取第一个单元格的值 range.AttachDispatch(wsMysheet.GetCells()); range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); vResult =range.GetValue(); CString str; if(vResult.vt == VT_BSTR) //字符串 { str=vResult.bstrVal; } else if (vResult.vt==VT_R8) //8字节的数字 { str.Format("%f",vResult.dblVal); } else if(vResult.vt==VT_DATE) //时间格式 { SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); } else if(vResult.vt==VT_EMPTY) //单元格空的 { str=""; } AfxMessageBox(str); */ /* wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("c:\\aaa.xls"))); //MessageBox("gg1"); //得到Worksheets wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true); //得到sheet1 wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("bend")),true); //得到全部Cells,此时,rgMyRge是cells的集合 range.AttachDispatch(wsMysheet.GetCells(),true); _variant_t vStr; BSTR bStr; vStr=range.GetItem(_variant_t((long)3),_variant_t((long)3)); bStr = (_bstr_t)vStr; //CString outstr=(LPCTSTR)(LPSTR)bStr; CString out2=""; for(int i=0;i<sizeof(bStr);i++) { out2+=(CString)(char)*(bStr+i); } AfxMessageBox(out2); */ //关闭execl ExcelApp.SetUserControl(FALSE); wbMyBook.Close (covOptional,covOptional,covOptional); wbsMyBooks.Close(); ExcelApp.Quit(); //释放对象 range.ReleaseDispatch(); wsMysheet.ReleaseDispatch(); wssMysheets.ReleaseDispatch(); wbMyBook.ReleaseDispatch(); wbsMyBooks.ReleaseDispatch(); ExcelApp.ReleaseDispatch(); }
Quit之前
SetUserControl(FALSE);
相关文章推荐
- 不借助 Wine 和云服务:新项目能让 Linux 完整运行微软 Office 套件
- 使用Python生成Excel格式的图片
- WPS Office:Linux 上的 Microsoft Office 的免费替代品
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- 用Coldfusion生成 OFFICE 文件的代码
- 重现 Office 2007 中的菜单和工具栏的方法
- Office Word九条常用技巧
- Microsoft Office 2007 SP1 简体中文正式版 升级包官方下载地址
- 官方 WPS office 2005 个人精装版 下载
- C#控制Excel Sheet使其自适应页宽与列宽的方法
- SQL 导入导出Excel数据的语句
- 文本、Excel、Access数据导入SQL Server2000的方法
- C#实现Excel动态生成PivotTable
- C#基于COM方式读取Excel表格的方法
- C#导出数据到Excel文件的方法
- Vbscript生成Excel报表的常用操作总结