两种方法操作excel

上传人:luoxia****01801 文档编号:65838997 上传时间:2019-01-02 格式:DOC 页数:5 大小:43.50KB
返回 下载 相关 举报
两种方法操作excel_第1页
第1页 / 共5页
两种方法操作excel_第2页
第2页 / 共5页
两种方法操作excel_第3页
第3页 / 共5页
两种方法操作excel_第4页
第4页 / 共5页
两种方法操作excel_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《两种方法操作excel》由会员分享,可在线阅读,更多相关《两种方法操作excel(5页珍藏版)》请在金锄头文库上搜索。

1、第一种方法,简单的,用CDatabase实现. 程序是一个基于对话框的,步骤: A,为了避免代码重复,设置下面几个全局变量(类范围的),要引入头文件 CDatabase m_db; /数据库 CString m_dbdriver; /要生成的EXCEL文件的目录 char m_pathMAX_PATH; /获取路径用的数组 CString m_strdir; /包括EXCEL文件名在内的路径名. CString m_strsql; /SQL命令语句,用m_db可直接执行.B,在OnInitDialog方法中,生成一个xls文件,并插入两条记录,可在TRY语句中进行,因为这里面要创建一张表,当再

2、次启动程序时,会有异常发生,说表已经存在了,这时就避免了重复创建和插入.代码如下:m_dbdriver=MICROSOFT EXCEL DRIVER (*.XLS); GetCurrentDirectory(MAX_PATH,m_path); m_strdir=m_path; m_strdir+=/test.xls; /上面初始化各个变量. m_strsql.Format(DRIVER=%s;DSN=;FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=%s;DBQ=%s,m_dbdriver,m_strdir,m_strdir); TRY if (m_db

3、.OpenEx(m_strsql,CDatabase:noOdbcDialog) m_strsql=Create Table OdbcExl(Name Text,Age Number,Gener Text); m_db.ExecuteSQL(m_strsql); m_strsql=Insert Into OdbcExl(Name,Age,Gener) Values(Bob,34,Male); m_db.ExecuteSQL(m_strsql); m_strsql=Insert Into OdbcExl(Name,Age,Gener) Values(Jane,23,Female); m_db.E

4、xecuteSQL(m_strsql); m_db.Close(); CATCH_ALL(e) / e-ReportError(); m_db.Close(); return FALSE; END_CATCH_ALL;C,其实上面已经达到了答题人的要求,但作为一个程序,这也太不像话了,于是我又稍微加了点不值一提的东西,在对话框上输入信息,再插入到EXCEL表中去,这一切都在按下插入按钮后发生: UpdateData(); m_strsql.Format(DRIVER=%s;DSN=;FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=%s;DBQ=%s, m

5、_dbdriver,m_strdir,m_strdir); TRY if (m_db.OpenEx(m_strsql,CDatabase:noOdbcDialog) m_strsql.Format(Insert into OdbcExl(Name,Age,Gener)Values(%s,%d,%s),m_name,m_age,m_gener); m_db.ExecuteSQL(m_strsql); CATCH_ALL(e) e-ReportError(); / db.Close(); END_CATCH_ALL; m_db.Close();可以说,只要对CDatabase稍有了解,对SQL语句

6、稍有了解,这个问题就很容易解决,如果要说这是一个针对Excel文件操作的方法,那是因为在OpenEx初始化数据库对象(不是打开哦)时用的文件后缀名为.xls而已,我们可以像在普通的数据库中一样进行其他操作,如用SELECT语句来读取EXCEL文件的内容等, 第一种方法完.下面是第二种方法,这里涉及的原理要复杂一些了,传说中的OLE(对象链接与嵌入)技术在这里用上了,EXCEL.EXE作为一个组件服务器,应用程序作为客户端.,还是直接写过程吧,头晕晕的,只能平铺直述了.A,从classwizard中add class处from type library,去office的安装目录下引入excel.

7、exe(这是office 2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,常用的有这几个_application,workbooks,_workbook,worksheets,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过新建得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks), _workboo

8、k就是一个表,相当于MDI中的一个视窗, worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets), _worksheet就表示一个表单, range表示元素的集合. 搞清楚上面这几个名词的意思非常重要.B,在dlg.h中声明下面几个变量: _Application exlapp; /组件服务器的各个classes _Workbook wbk; Workbooks wbks; _Worksheet wht; Worksheets whts; LPDISPATCH lp

9、Disp; 并在app.cpp的InitInstance方法中加入下面两句AfxInitOle(); AfxEnableControlContainer();C,这里我没有像上面一样完全用程序来生成一个Excel文件,而是在开始时就在当前目录下生成了一个Excel文件,在对话框上我设置了两个按钮,下面是显示按钮的代码: /创建Excel服务器 if(!exlapp.CreateDispatch(Excel.Application) AfxMessageBox(无法启动Excel服务器!); return; COleVariant avar(long)DISP_E_PARAMNOTFOUND,V

10、T_ERROR); exlapp.SetVisible(TRUE);/使Excel可见 exlapp.SetUserControl(TRUE);/允许其它用户控制Excel,否则Excel将一闪即逝. /Open an excel file char pathMAX_PATH; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += VCOpExcel; wbks.AttachDispatch(exlapp.GetWorkbooks(); lpDisp=wbks.Open(strPath, avar,avar

11、,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbks.ReleaseDispatch(); exlapp.ReleaseDispatch();D,与上面第一种方法一样,可以插入记录: UpdateData(); /读入数据 if (=m_name) /判断名字输入有效 MessageBox(Please input a right name); return; if (0=m_age|100=m_age) /判断年龄输入有效 MessageBox(Please input a right age); return

12、; char *p=strupr(_strdup(m_gener); if (strcmp(p,FEMALE)&strcmp(p,MALE) /判断性别输入有效 MessageBox(Please input a right gener); return; Range range; Range usedRange; COleVariant avar(long)DISP_E_PARAMNOTFOUND,VT_ERROR); if(!exlapp.CreateDispatch(Excel.Application) /启动服务器 AfxMessageBox(无法启动Excel服务器!); retur

13、n; char pathMAX_PATH; GetCurrentDirectory(MAX_PATH,path); CString strPath = path; strPath += VCOpExcel; wbks.AttachDispatch(exlapp.GetWorkbooks(); lpDisp=wbks.Open(strPath, /初始化. avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); wbk.AttachDispatch(lpDisp); whts.AttachDispatch(w

14、bk.GetWorksheets(); lpDisp=wbk.GetActiveSheet(); wht.AttachDispatch(lpDisp); usedRange.AttachDispatch(wht.GetUsedRange(); range.AttachDispatch(usedRange.GetRows(); long iRowNum=range.GetCount();/已经使用的行数 range.AttachDispatch(wht.GetCells(); range.SetItem(COleVariant(long(iRowNum+1),COleVariant(long(1),COleVariant(m_name); range.SetItem(COleVariant(long(iRowNum

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号