VC操作EXCEL的方法.doc
文本预览下载声明
VC++操作EXCEL的方法
2007年12月27日 星期四 下午 04:53
Workbooks wbsMyBooks; _Workbook wbMyBook;
Worksheets wssMysheets; _Worksheet wssMysheet;
Range range; Range iCell;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant covTrue((short)TRUE), covFalse((short)FALSE),
??????????????????? covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
??? //创建Excel 2000服务器(启动Excel),尽量在初始化中建立excel_app对象
??? //以确保一次只打开一个excel服务器
//???? if(!m_ExcelApp.CreateDispatch(Excel.Application))
//???? {
//???????? AfxMessageBox(无法启动Excel服务器!);
//???????? return;
//???? }
??? //app.SetVisible(TRUE);?????????? //使Excel可见
??? //ExcelApp.SetUserControl(TRUE);?????? //允许其它用户控制Excel
??? //打开c:\\*.xls
??? wbsMyBooks.AttachDispatch(m_ExcelApp.GetWorkbooks());
??? lpDisp = wbsMyBooks.Open(m_strPath,//此处无法打开文档没有问题
??????? covOptional, covOptional, covOptional, covOptional, covOptional,
??????? covOptional, covOptional, covOptional, covOptional, covOptional,
??????? covOptional, covOptional);
??? wbMyBook.AttachDispatch(lpDisp);//得到Workbook
??? wssMysheets.AttachDispatch(wbMyBook.GetWorksheets());//得到Worksheets
??? //得到当前活跃sheet,如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
??? lpDisp = wbMyBook.GetActiveSheet();
??? wssMysheet.AttachDispatch(lpDisp);
??? //读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
??? Range usedRange;
??? usedRange.AttachDispatch(wssMysheet.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开始
??? //读取第iStartRow行,第iStartCol列单元格的值
??? range.AttachDispatch(wssMysheet.GetCells());
??? range.AttachDispatch(range.GetItem(COleVariant(iStartRow),COleVariant(iStartCol)).pdispVal);
??? vResult = range.GetValue();
??? CString str;
??? if(vResult.vt == VT_BSTR)??????? //字符串
??????? str = vResult.bstrVal
显示全部