VC读取写入EXCEL2003.doc_第1页
VC读取写入EXCEL2003.doc_第2页
VC读取写入EXCEL2003.doc_第3页
VC读取写入EXCEL2003.doc_第4页
VC读取写入EXCEL2003.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用automation具体如下:1。你要在新建的工程中导入excel的类库。以新建基础对话框工工程test为例。建好后通过类向导(ctrl+w)addclass选from a type libray.,excel2003的是excel.exe文件,在c:/program files/microsoft office/office11/文件夹下。选excel.exe,把所有的类都导入,注意使用Shift按键选择。2。在testApp:InitInstance()中初始化,AfxOleInit();/加在initinstance方法里最前就好。3. 在对话框中加一个按钮,双击按钮对应的处理函数如下:别望了在加头文件:在#include stdafx.h后面加#include excel.h31/打开Excel文件,使用Excel程序显示,不读数据,也不写入数据,手工使用鼠标关闭Excel文件。/声明操作excel文件类的对象 _Application objApp;/ _application代表了EXCEL服务器 Workbooks objBooks; /workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过新建得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks), COleVariant VOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR); /检测电脑上是否安装了Excel程序。 if(!objApp.CreateDispatch(Excel.Application) AfxMessageBox(无法启动Excel程序,请正确安装!); return; objApp.m_bAutoRelease = TRUE; /?什么意思?objApp.SetVisible(TRUE); /打开Excel程序,没有显示任何数据。 objApp.SetUserControl(TRUE);/允许其它用户控制Excel,否则Excel将一闪即逝/下面两句的功能和 objBooks = objApp.GetWorkbooks(); 一样。 LPDISPATCH pWkBooks = objApp.GetWorkbooks(); /GetWorkbooks什么功能?objBooks.AttachDispatch(pWkBooks,TRUE); /将一个IDispatch连接附着于COleDispatchDriver对象 /获得当前程序所在的路径,excel文件在此路径下。 char CurrentProgramPathMAX_PATH; GetCurrentDirectory(MAX_PATH,CurrentProgramPath); CString ExcelFilePathName = CurrentProgramPath;/ExcelFilePathName表示excel文件的路径和文件名 ExcelFilePathName += Data.xls; /打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。/如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。 /采用只读方式打开excel文件,_variant_t(true), true必须为小写,大写编译出错。objBooks.Open(ExcelFilePathName,VOptional, _variant_t(true), VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional,VOptional,VOptional); 3.2/打开Excel文件,读出其中的数据,供后面设置Mschart控件使用。/Excel文件使用三列,第一列表示序号,第二列表示第一组份的数据,第二列表示第二组份的数据。/声明操作excel文件类的对象_Application objApp; /_application代表了EXCEL服务器 Workbooks objBooks;/workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过新建得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks), _Workbook objBook;/_workbook就是一个表,相当于MDI中的一个视窗, Worksheets objSheets; / worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets) _Worksheet objSheet;/_worksheet就表示一个表单, Range objRange,usedRange;/Range 表示元素的集合 COleVariant VOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR); VARIANT ret; CString cstr=; /检测电脑上是否安装了Excel程序。 if(!objApp.CreateDispatch(Excel.Application) AfxMessageBox(无法启动Excel服务器!); return; / objApp.SetVisible(TRUE); /打开Excel程序,没有显示任何数据。 / objApp.SetUserControl(FALSE);/允许其它用户控制Excel,否则Excel将一闪即逝 / objApp.m_bAutoRelease = TRUE; /?什么意思?objBooks = objApp.GetWorkbooks(); /获得当前程序所在的路径,excel文件在此路径下。 char CurrentProgramPathMAX_PATH; GetCurrentDirectory(MAX_PATH,CurrentProgramPath); CString ExcelFilePathName = CurrentProgramPath;/ExcelFilePathName表示excel文件的路径和文件名 ExcelFilePathName += Data.xls; /打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。/如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。 /采用只读方式打开excel文件,_variant_t(true), true必须为小写,大写编译出错。 objBook = objBooks.Open(ExcelFilePathName,VOptional, _variant_t(true), VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional); objSheets = objBook.GetWorksheets(); /设定当前的工作表sheet是excel文件的第几个工作表sheet COleVariant(short)1)表示第一个 COleVariant(short)2)表示第二个 objSheet = objSheets.GetItem(COleVariant(short)1); /获得已经使用的行数和列数。 usedRange.AttachDispatch(objSheet.GetUsedRange(); objRange.AttachDispatch(usedRange.GetRows(); long iRowNum=objRange.GetCount();/已经使用的行数 objRange.AttachDispatch(usedRange.GetColumns(); long iColumnNum=objRange.GetCount();/已经使用的列数 /设定读取的行列范围 /objRange = objSheet.GetRange(COleVariant(A1), COleVariant(C1000); ret = objRange.GetValue(VOptional); COleSafeArray sa(ret); /读出内容。 long lNumRows; long lNumCols; sa.GetUBound(1, &lNumRows); sa.GetUBound(2, &lNumCols); long index2; VARIANT val; int row, column; for(row=1;row=iRowNum;row+)/row表示行数 for(column=1;column=iColumnNum;column+)/c表示列数index0=row;index1=column; sa.GetElement(index, &val);/val类对象中包含取的row行、column列的内容 switch(val.vt)case VT_R8: /数字 /TRACE(tt%1.2f, val.dblVal); CString cstr2=; cstr2.Format(%1.1f,val.dblVal); cstr+=cstr2+n; break; case VT_BSTR: /文字/TRACE(tt%s,(CString)val.bstrVal); cstr+=(CString)val.bstrVal+n; break; case VT_EMPTY:/表示此row行、column列的内容为空。 break; AfxMessageBox(cstr); objBook.Close(COleVariant(short)FALSE),VOptional,VOptional); objApp.Quit();3.3/打开一个Excel文件,在前面的数据后面添加新的数据 /声明操作excel文件类的对象 _Application objApp; /组件服务器的各个classes /_application代表了EXCEL服务器 Workbooks objBooks;/workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过新建得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks), _Workbook objBook; /_workbook就是一个表,相当于MDI中的一个视窗, Worksheets objSheets; / worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets) _Worksheet objSheet; /_worksheet就表示一个表单, Range objRange,usedRange; /Range 表示元素的集合 LPDISPATCH lpDisp; /LPDISPATCH就是一个指向excel对象的指针 COleVariant VOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR); /检测电脑上是否安装了Excel程序。 if(!objApp.CreateDispatch(Excel.Application) /启动服务器 AfxMessageBox(无法启动Excel服务器!); return; / objApp.m_bAutoRelease = TRUE; /?什么意思 objApp.SetUserControl(TRUE);/允许其它用户控制Excel,否则Excel将一闪即逝 /获得当前程序所在的路径,excel文件在此路径下。 char CurrentProgramPathMAX_PATH; GetCurrentDirectory(MAX_PATH,CurrentProgramPath); CString ExcelFilePathName = CurrentProgramPath; /ExcelFilePathName表示excel文件的路径和文件名 ExcelFilePathName += Data.xls; objBooks.AttachDispatch(objApp.GetWorkbooks(); /此句的功能objBooks = objApp.GetWorkbooks();一样 /打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。/如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。 lpDisp=objBooks.Open(ExcelFilePathName,VOptional,VOptional,VOptional,VOptional,VOptional, VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional,VOptional); objBook.AttachDispatch(lpDisp); /设定当前的工作表sheet objSheets.AttachDispatch(objBook.GetWorksheets(); lpDisp=objBook.GetActiveSheet(); objSheet.AttachDispatch(lpDisp); /获得已经使用的行数 usedRange.AttachDispatch(objSheet.GetUsedRange(); objRange.AttachDispatch(usedRange.GetRows(); long iRowNum=objRange.GetCount();/已经使用的行数 objRange.AttachDispatch(objSheet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论