程序代码如下:
_Application excelapp;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
Range usedRange;
LPDISPATCH lpDisp;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!excelapp.CreateDispatch("Excel.Application"))
{
MessageBox("确认是否安装了Excel");
} books.AttachDispatch(excelapp.GetWorkbooks());
//打开Excel
lpDisp = books.Open(strText,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
book.AttachDispatch(lpDisp);
sheets.AttachDispatch(book.GetWorksheets());
lpDisp = book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
//取得已经使用的行数
long iRowNum = range.GetCount();
range.AttachDispatch(usedRange.GetColumns());
//取得已经使用的列数
long iColNum = range.GetCount();
//取得已使用区域的起始行,从1开始
long iStartRow = usedRange.GetRow();
//取得已使用区域的起始列,从1开始
long iStartCol = usedRange.GetColumn();
COleVariant x,y,z;
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal);
x = range.GetValue();
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)3)).pdispVal);
y = range.GetValue();
//释放对象
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
excelapp.ReleaseDispatch();
book.Close(covOptional,COleVariant(strText),covOptional);
books.Close();
excelapp.Quit();
问题是:每次将EXCEL文件导入到SQL数据库,在任务管理器中都有一个EXCEL.EXE的进程,作为导入用的EXCEL文件相应也打不开,每次要结束EXCEL.EXE进程,都必须手动去结束,请问在VC中有没有用程序去控制。excelapp.Quit();这个应该是退出的语句,不知道为什么EXCEL.EXE进程却不能结束。
_Application excelapp;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
Range usedRange;
LPDISPATCH lpDisp;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!excelapp.CreateDispatch("Excel.Application"))
{
MessageBox("确认是否安装了Excel");
} books.AttachDispatch(excelapp.GetWorkbooks());
//打开Excel
lpDisp = books.Open(strText,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
book.AttachDispatch(lpDisp);
sheets.AttachDispatch(book.GetWorksheets());
lpDisp = book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
//取得已经使用的行数
long iRowNum = range.GetCount();
range.AttachDispatch(usedRange.GetColumns());
//取得已经使用的列数
long iColNum = range.GetCount();
//取得已使用区域的起始行,从1开始
long iStartRow = usedRange.GetRow();
//取得已使用区域的起始列,从1开始
long iStartCol = usedRange.GetColumn();
COleVariant x,y,z;
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal);
x = range.GetValue();
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)3)).pdispVal);
y = range.GetValue();
//释放对象
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
excelapp.ReleaseDispatch();
book.Close(covOptional,COleVariant(strText),covOptional);
books.Close();
excelapp.Quit();
问题是:每次将EXCEL文件导入到SQL数据库,在任务管理器中都有一个EXCEL.EXE的进程,作为导入用的EXCEL文件相应也打不开,每次要结束EXCEL.EXE进程,都必须手动去结束,请问在VC中有没有用程序去控制。excelapp.Quit();这个应该是退出的语句,不知道为什么EXCEL.EXE进程却不能结束。
解决方案 »
- MFC中怎么使用全局变量?
- 关于头文件中的一些关键字的疑惑
- 在.net架构中,是不是以后的操作系统,再也不会出现.dll文件了,彻底取消这种格式了,是吗?
- CDaoDatabase::Execute创建表后不能马上用CDaoTableDef::Open()打开?
- 创建控件的问题(参与就有分)!!!!!!!!!!!!!!!!!!!!!!
- 新手请教各位控件大虾关于Microsoft Chart Control的一个基本问题
- 你ya是高手就进来看看!!要对CCreateContext很有研究的哦!
- 6678通信调试
- DLGTEMPLATE 无法控制 DoModal 的窗口大小
- 组件技术和自动化技术
- 如何使用cadlib?
- 中级软件工程师是个神马!!
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
excelapp.ReleaseDispatch();
book.Close(covOptional,COleVariant(strText),covOptional);
books.Close();
excelapp.Quit();
这些程序里面有没有接口释放呢?我不是很懂?你能给我说清楚一点不?非常感谢!!!
//注意顺序问题
book.Close(covOptional,COleVariant(strText),covOptional);
books.Close();
book.ReleaseDispatch();
books.ReleaseDispatch(); excelapp.Quit(); //退出;
excelapp.ReleaseDispatch();//退出后再释放对象