VC操作Excel的方法(2007-01-05 21:18:45)
 
分类:VC,VB,Matlab编程开发
A:    classwizardadd classfrom type library,office的安装目录下引入(这是office 2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,常用的有这几个_application,workbooks,_workbook,worksheets,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,MDI程序里的一个视窗一样,所有的视窗就是workbooks), _workbook就是一个表,相当于MDI中的一个视窗, worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2,所有这些sheetn就组成了worksheets), _worksheet就表示一个表单, range表示元素的集合. 搞清楚上面这几个名词的意思非常重要.
B,dlg.h中声明下面几个变量:
 _Application exlapp;   //组件服务器的各个classes
 _Workbook wbk;
 Workbooks wbks;
 _Worksheet wht;
 Worksheets whts;
 LPDISPATCH lpDisp;
cstring转为int 并在app.cppInitInstance方法中加入下面两句AfxInitOle(); AfxEnableControlContainer();
C,这里我没有像上面一样完全用程序来生成一个Excel文件,而是在开始时就在当前目录下生成了一个Excel文件,在对话框上我设置了两个按钮,下面是"显示"按钮的代码:
 //创建Excel服务器
 if(!exlapp.CreateDispatch("Excel.Application"))
 {
  AfxMessageBox("无法启动Excel服务器!");
  return;
 }
 COleVariant  avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
 exlapp.SetVisible(TRUE);//使Excel可见
 exlapp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝.
 
 //Open an excel file
 char path[MAX_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);
 
 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;
 }
 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服务器!");
  return;
 }
 char path[MAX_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(wbk.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+1)),COleVariant(long(2)),COleVariant(m_age));
 range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener));
 
 wbk.Save();
 wbk.Close(avar,COleVariant(strPath),avar);
 wbks.Close();
 exlapp.Quit();
()
分享到新浪微博
阅读(802)|评论(2)|收藏(0)|打印|举报
前一篇:结婚流程(转)
后一篇:vc excel 操作补充
评论    重要提示:警惕虚假中奖信息,点击查看详情      免费任选1000款游戏新手卡[发评论]
你好
2007-01-11 12:30:31
我参考你的文章做了一下关于excel的操作
但是执行

if(!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
    AfxmessageBox("创建Excel服务失败");
    exit(1);
}
总是失败。
博主回复:
拼命三郎
2007-01-12 09:06:12
欢迎光临我的blog :>
对组件得先进行初始化COM
.app 文件的InitInstance()函数加入AfxOleInit();

if (CoInitialize(NULL)!=0) 

    AfxMessageBox("初始化COM支持库失败!"); 
    exit(1); 
VC中操作excel表格 收藏
摘要:使用Microsoft Office所带的控件来实现代码操作excel表格。
 
操作系统是Microsoft XP,办公套装是Microsoft Office 2003,编程环境是Microsoft Visual Studio 6.0,一切都是Microsoft
我最近要将数据库中的内容查询出来放到excel表格以便打印,所以上网了这方面的内容,这里主要是抛砖引玉。
从思路上来看,操作excel表格就是将其打开,然后写入/读出数据,然后关闭。
首先创建一个程序(我的例子是一个MFC的单文档程序),在程序的入口处和出口处先作这样两个步骤来支持COM库:
在程序入口处CXXXApp:: InitInstance()函数AfxEnableControlContainer();语句之后加入下面几行:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。