CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

请介绍一个读取EXCEL表的例子,VC的。

楼主yangl79(杨)2004-12-02 21:29:17 在 VC/MFC / 数据库 提问

我希望是调用OFFICE接口来读,我以前试过用ADO来读,可是会出现这种情况:假如表的第三行的前两列被合并了,那么ADO读到第三行就会认为表结束了,实际上后面还有,它连第三行也读不出来,如果能解决这个问题,那用ADO来读也可以。 问题点数:30、回复次数:5Top

1 楼kingzai(stevenzhu)回复于 2004-12-02 22:07:57 得分 20

Steps:  
  1.   HOWTO:   Create   an   Automation   Project   Using   MFC   and   a   Type   Library    
  http://support.microsoft.com/default.aspx?scid=kb;en-us;Q178749  
  2.   HOWTO:   Use   MFC   to   Automate   Excel   and   Fill   a   Range   with   an   Array   (Q186120)  
  http://support.microsoft.com/default.aspx?scid=kb;EN-US;q186120  
   
  REFERENCES  
  For   more   information   about   automating   Microsoft   Excel   using   MFC,   please   see   the   following   articles   in   the   Microsoft   Knowledge   Base:    
   
  Q186122   HOWTO:   Use   MFC   to   Automate   Excel   and   Obtain   an   Array   from   a   Range    
   
  Q184663   HOWTO:   Embed   and   Automate   a   Microsoft   Excel   Worksheet   with   MFC    
   
  Q179706   Use   MFC   to   Automate   Excel   and   Create/Format   a   New   Workbook    
   
  Q178781   HOWTO:   Automate   Excel   Using   MFC   and   Worksheet   Functions    
   
  Q178783   HOWTO:   Use   MFC   to   Create   a   Microsoft   Excel   Chart    
  Top

2 楼kingzai(stevenzhu)回复于 2004-12-02 22:08:19 得分 0

Sample   Code    
              //   OLE   Variant   for   Optional.  
              COleVariant   VOptional((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);  
   
              _Application   objApp;  
   
              _Workbook   objBook;  
              Workbooks   objBooks;  
              Worksheets   objSheets;  
              _Worksheet   objSheet;  
              Range   range;  
   
              if(!UpdateData(TRUE))  
              {  
                    return;  
              }  
   
              //   Instantiate   Excel   and   start   a   new   workbook.  
              objApp.CreateDispatch("Excel.Application");  
              objBooks   =   objApp.GetWorkbooks();  
              objBook   =   objBooks.Add(VOptional);  
              objSheets   =   objBook.GetWorksheets();  
              objSheet   =   objSheets.GetItem(COleVariant((short)1));  
   
              //Get   the   range   where   the   starting   cell   has   the   address  
              //m_sStartingCell   and   it's   dimensions   are   m_iNumRows   x   m_iNumCols.  
              range   =   objSheet.GetRange(COleVariant(m_sStartingCell),  
                                                                  COleVariant(m_sStartingCell));  
              range   =   range.GetResize(COleVariant(m_iNumRows),  
                                                              COleVariant(m_iNumCols));  
   
              //***   Fill   the   range   with   an   array   of   values.  
   
              //Create   the   SAFEARRAY.  
              COleSafeArray   saRet;  
              DWORD   numElements[2];  
              numElements[0]=   m_iNumRows;       //Number   of   rows   in   the   range.  
              numElements[1]=   m_iNumCols;       //Number   of   columns   in   the   range.  
   
              if(m_bFillWithStrings)  
              {  
                    saRet.Create(VT_BSTR,   2,   numElements);  
              }  
              else  
              {  
                    saRet.Create(VT_R8,   2,   numElements);  
              }  
   
              //Fill   the   SAFEARRAY.  
              long   index[2];  
              long   iRow;  
              long   iCol;  
   
              for(iRow=0;iRow<=m_iNumRows-1;iRow++)  
              {  
                    for(iCol=0;iCol<=m_iNumCols-1;iCol++)  
                    {  
                          index[0]   =   iRow;  
                          index[1]   =   iCol;  
                          if(m_bFillWithStrings)             //Fill   with   Strings.  
                          {  
                                VARIANT   v;  
                                CString   s;  
                                VariantInit(&v);  
                                v.vt   =   VT_BSTR;  
                                s.Format("r%dc%d",   iRow,   iCol);  
                                v.bstrVal   =   s.AllocSysString();  
                                saRet.PutElement(index,   v.bstrVal);  
                                SysFreeString(v.bstrVal);  
                                VariantClear(&v);  
                          }  
                          else                                           //Fill   with   Numbers.  
                          {  
                                double   d;  
                                d   =   (iRow*1000)   +   iCol;  
                                saRet.PutElement(index,   &d);  
                          }  
                    }  
              }  
   
              //Set   the   range   value   to   the   SAFEARRAY.  
              range.SetValue(COleVariant(saRet));  
              saRet.Detach();  
   
              //Return   control   of   Excel   to   the   user.  
              objApp.SetVisible(TRUE);  
              objApp.SetUserControl(TRUE);  
  Compile   and   Run   the   project.    
  Top

3 楼yangl79(杨)回复于 2004-12-03 00:46:26 得分 0

请问上面的程序要如何才能通过编译呢?Top

4 楼bohut(●伯虎● )回复于 2004-12-03 09:56:12 得分 10

http://www.vckbase.com/document/finddoc.aspTop

5 楼bohut(●伯虎● )回复于 2004-12-03 09:56:30 得分 0

有例子程序,都可以编译成功Top

相关问题

  • php读取EXCEL
  • 读取excel
  • help!VC里面怎么读取EXCEL里面的数据?
  • EXCEL读取问题?
  • excel读取问题
  • 请给点用非MFC的VC调用EXCEL的例子,谢谢!
  • 求一个POI读取word例子
  • 谁能给我一个用VC写EXCEL文件的例子,我的例子老是编译不通过!
  • vc读取中文乱码!!!!
  • 关于EXCEL的读取

关键词

  • excel
  • mfc
  • ado
  • microsoft
  • numelements
  • objsheet
  • colevariant
  • objbook
  • inumrows
  • inumcols

得分解答快速导航

  • 帖主:yangl79
  • kingzai
  • bohut

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo