请问一下vc++中vc咀嚼片什么时候吃好用theApp?theApp.m_strName是什么意思?

VC中实现读取Excel表数据总结 - vfdff的博客 - 编程中国
VC中实现读取Excel表数据总结
利用VC对Excel进行操作。主要的函数是从网上找的,有些东西自己做了修改。可以对一个目录下的所有Excel表进行处理。主要代码如下:&//获取一个目录下所有Excel表名,并加入到一个数组中。char oldPath[MAX_PATH];&getcwd(oldPath,MAX_PATH);&chdir(m_strDirectory);&CFileFind fileF&BOOL bExist=FALSE;&bExist=fileFind.FindFile("*.xls");&while(bExist)&{& bExist=fileFind.FindNextFile();& CString strTitle=fileFind.GetFileTitle(); & m_strTableAll.Add(strTitle);&}&fileFind.Close();&chdir(oldPath);&&//处理所有Excel数据,并把所有数据加入到一个二维数组中CString m_strArray[i][j]&CoInitialize(NULL);&int i,j;& //用来循环&// 获得EXCEL的CLSID&CLSID&HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid);&&if(FAILED(hr)) {& AfxMessageBox("CLSIDFromProgID() 函数调用失败!");&&}&&// 创建实例&IDispatch *pXlA&hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pXlApp);&if(FAILED(hr)) {& AfxMessageBox("请检查是否已经安装EXCEL!");&&}&&// 显示,将Application.Visible属性置1&/VARIANT&x.vt = VT_I4;&x.lVal = 1;&AutoWrap(DISPATCH_PROPERTYPUT, NULL, pXlApp, L"Visible", 1, x);&// 获取Workbooks集合&IDispatch *pXlB&{& VARIANT& VariantInit(&result);& AutoWrap(DISPATCH_PROPERTYGET, &result, pXlApp, L"Workbooks", 0);& pXlBooks = result.pdispV&}&&CString strN& //Excel表完整路径&CString strT&& //临时变量,保存单元格数据中的CString型&double dblT&& //临时变量,保存单元格数据中的double型&//用来保存信息的数组&VARIANT&arr.vt = VT_ARRAY | VT_VARIANT;&SAFEARRAYBOUND sab[2];&sab[0].lLbound = 1; sab[0].cElements = 40;&sab[1].lLbound = 1; sab[1].cElements = 16;&arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab);&int tableN&int nCount=m_DataConn.m_strTableAll.GetSize(); &for(tableNum=0;tableNum&nCtableNum++)&{& strName.Format("%s\\%s",m_DataConn.m_strDirectory,m_DataConn.m_strTableAll.GetAt(tableNum));&& && // 调用Workbooks.Open()方法,打开一个已经存在的Workbook& IDispatch *pXlB& {&& VARIANT&& parm.vt = VT_BSTR;&& // parm.bstrVal = ::SysAllocString(L"''strName''");&& parm.bstrVal=strName.AllocSysString();&& VARIANT&& VariantInit(&result);&& AutoWrap(DISPATCH_PROPERTYGET, &result, pXlBooks, L"Open", 1,parm);&& pXlBook = result.pdispV& }& & // 初始化数组内容& /*& for(int i=1; i&=15; i++) {& for(int j=1; j&=15; j++) {& VARIANT& tmp.vt = VT_BSTR;& wsprintfW(szTmp,L"%i,%i",i,j);& tmp.bstrVal = SysAllocString(szTmp);& // 添加数据到数组中& long indices[] = {i,j};& SafeArrayPutElement(arr.parray, indices, (void *)&tmp);& }& }& */& // 从Application.ActiveSheet属性获得Worksheet对象& IDispatch *pXlS& {&& VARIANT&& VariantInit(&result);&& AutoWrap(DISPATCH_PROPERTYGET, &result, pXlApp, L"ActiveSheet", 0);&& pXlSheet = result.pdispV& }& & // 选择一个16x40大小的Range& IDispatch *pXlR& {&& VARIANT&& parm.vt = VT_BSTR;&& parm.bstrVal = ::SysAllocString(L"A1:P40");& &&& VARIANT&& VariantInit(&result);&& AutoWrap(DISPATCH_PROPERTYGET, &result, pXlSheet, L"Range", 1, parm);&& VariantClear(&parm);& &&& pXlRange = result.pdispV& }& // 用这个Range读取数据& AutoWrap(DISPATCH_PROPERTYGET, &arr, pXlRange, L"Value",0);& for(i=1; i&=40; i++)& {&& for(j=1; j&=16; j++)&& {&&& VARIANT&&& //tmp.vt = VT_BSTR;&&& // 添加数据到数组中&&& long indices[] = {i,j};&&& SafeArrayGetElement(arr.parray, indices, (void *)&tmp);&&& if(tmp.vt ==VT_BSTR)&&& {&&&& strTmp=tmp.bstrV&&& }&&& else if(tmp.vt==VT_R8)&&& {&&&& dblTmp=tmp.dblV&&&& strTmp.Format("%f",dblTmp);&&& }&&& else if(tmp.vt=VT_NULL)&&& {&&&& strTmp="";&&& }&&& _bstr_t str1=strT &&& WCHAR *str2=str1;&&& pDoc-&m_strArray[tableNum*40+i][j]=str2;&& }& }& AutoWrap(DISPATCH_METHOD, NULL, pXlBook, L"Close", 0);& VariantClear(&arr);& pXlRange-&Release();& pXlSheet-&Release();& pXlBook-&Release();&}&// 退出,调用Application.Quit()方法&// 释放所有的接口以及变量&AutoWrap(DISPATCH_METHOD, NULL, pXlApp, L"Quit", 0);&pXlBooks-&Release();&pXlApp-&Release();&&// 注销COM库&CoUninitialize();&//**********************//// AutoWrap 函数的正体// 先声明:这个函数不是偶写的// AutoWrap() - Automation helper function...HRESULT CExcelView::AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...){&&& // Begin variable-argument list...&&& va_&&& va_start(marker, cArgs);&&& if(!pDisp) {&&& & AfxMessageBox("NULL IDispatch passed to AutoWrap()");&&&&&&& _exit(0);&&& }&&& // Variables used...&&& DISPPARAMS dp = { NULL, NULL, 0, 0 };&&& DISPID dispidNamed = DISPID_PROPERTYPUT;&&& DISPID dispID;&&& HRESULT&&& char buf[200];&&& char szName[200];&&& // Convert down to ANSI&&& WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);&&& // Get DISPID for name passed...&&& hr = pDisp-&GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);&&& if(FAILED(hr)) {&&&&&&& sprintf(buf, "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx", szName, hr);&&&&&&& AfxMessageBox(buf);&&&&&&& _exit(0);&&&&&&&&&& }&&& // Allocate memory for arguments...&&& VARIANT *pArgs = new VARIANT[cArgs+1];&&& // Extract arguments...&&& for(int i=0; i&cA i++) {&&&&&&& pArgs[i] = va_arg(marker, VARIANT);&&& }&&& // Build DISPPARAMS&&& dp.cArgs = cA&&& dp.rgvarg = pA&&& // Handle special-case for property-puts!&&& if(autoType & DISPATCH_PROPERTYPUT) {&&&&&&& dp.cNamedArgs = 1;&&&&&&& dp.rgdispidNamedArgs = &dispidN&&& }&&& // Make the call!&&& hr = pDisp-&Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);&&& if(FAILED(hr)) {&&&&&&& sprintf(buf, "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx", szName, dispID, hr);&&&&&&& AfxMessageBox(buf);&&&&&&& _exit(0);&&&&&&&&&& }&&& // End variable-argument section...&&& va_end(marker);&&& delete [] pA&&&} 文章出处:http://www.diybl.com/course/3_program/vc/vc_js/83_2.html
浏览1590838次
(38489)(37381)(32492)(25097)(23502)(22511)(20742)(19513)(19178)(19070)简单的VC++基础问题_百度知道
简单的VC++基础问题
CString sqlStr_
sqlStr_findid=&SELECT * FROM tb_studentinfo WHERE tb_studentinfo.studentid='&+m_studentid+&' &;
myfindset_id = new CStudentinfoset(&((CMystudentsysApp*)AfxGetApp())-&m_DB);
if(!myfindset_id-&Open(AFX_DB_USE_DEFA...
我有更好的答案
if(!myfindset_id-&Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr_findid))这不是判断是否打开表,而是判断是否成功执行了查询操作,成功执行查询操作后会得到一个包含若干条记录的数据集,if(myfindset_id-&GetRecordCount()==0)
是判断数据集中记录的条目,因为数据集中可能一条记录都没有,即没有符合查询语句条件的记录
哦 我的意思是:打开表,如果成功地打开表,那么肯定表中有自己输入的信息啊,为什么后面还能出现出现GetRecordCount()==0呢?打开表的原理就是按照我输入的内容去找的吧?既然可以打开 证明表中有符合我输入的内容的记录,好矛盾啊 我感觉我的理解错在打开表的原理那里。就是不绝对按照我自己输入的内容去打开表 可能是按照我输入的内容的属性去找,再看看表中记录吧?
不是打开表,从来都不打开表。只会从表中查询数据,然后返回一个记录集(RecordSet),返回符合查询语句的记录集,记录集中的记录可能有多条,也可能一条都没有
采纳率:56%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!vc中combox控件使用
[问题点数:40分,结帖人wendiaobaoer]
vc中combox控件使用
[问题点数:40分,结帖人wendiaobaoer]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年5月 VC/MFC大版内专家分月排行榜第三
匿名用户不能发表回复!|没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 vc咀嚼片什么时候吃好 的文章

 

随机推荐