VC通过Excel接口 操作Excel的方法

VC操作Excel的方法

A:    

从classwizard中addclass处from typelibrary,去office的安装目录下引入excel.exe(这是office2003的选择,其他版本都是用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中声明下面几个变量:

 _Applicationexlapp;   //组件服务器的各个classes
 _Workbook wbk;
 Workbooks wbks;
 _Worksheet wht;
 Worksheets whts;
 LPDISPATCH lpDisp;

 并在app.cpp的InitInstance方法中加入下面两句
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();

你可能感兴趣的:(VC通过Excel接口 操作Excel的方法)