CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何将CListCtrl控件里的数据导入到excel中?

楼主bbbs(霞星焰日)2006-03-04 19:21:17 在 VC/MFC / 基础类 提问

请问:如何将CListCtrl控件里的数据导入到excel中?(以下我摘入,并经过我晕改的代码,请各位能指点一二!谢谢)  
  void   CDIALOG_PERSONNEL::OnButton1()    
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
  CDatabase   database;  
          CString   sDriver   =   "MICROSOFT   EXCEL   DRIVER   (*.XLS)";    
          CString   sExcelFile,sPath;    
          CString   sSql;  
   
  //»ñÈ¡Ö÷³ÌÐòËùÔÚ·¾¶,´æÔÚsPathÖÐ  
          GetModuleFileName(NULL,sPath.GetBufferSetLength   (MAX_PATH+1),MAX_PATH);  
          sPath.ReleaseBuffer   ();  
          int   nPos;  
          nPos=sPath.ReverseFind   ('\\');  
          sPath=sPath.Left   (nPos   +   1);  
          CString   sFileName;  
          CFileDialog   fDlg(FALSE,   "xls",   sPath   +   "aaaa.xls",  
          OFN_HIDEREADONLY   |   OFN_OVERWRITEPROMPT,  
          "xls   File   (*.xls)|*.xls|");  
  // CFileDialog   fDlg(FALSE,//Save;  
  //         "xls",NULL,OFN_HIDEREADONLY   |   OFN_OVERWRITEPROMPT,"Microsoft   Excel   2000   (*.xls)|*.xls|ËùÓÐÎļþ(*.*)|*.*||",this);  
   
   
          if(fDlg.DoModal()==IDOK)  
  {  
              sFileName   =   fDlg.GetPathName();  
  }  
          else  
              return;  
   
            sExcelFile   =   sFileName;   //   Òª½¨Á¢µÄExcelÎļþ  
   
   
          TRY  
  {  
              sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",   sDriver,sExcelFile,sExcelFile);  
   
              if(   database.OpenEx(sSql,CDatabase::noOdbcDialog)   )  
      {  
                  sSql   =   "CREATE   TABLE   Raport   (Col1   TEXT,Col2   TEXT,Col3   TEXT,Col4   TEXT)";  
   
                  database.ExecuteSQL(sSql);  
   
                  CString   Mydata1   ,Mydata2   ,Mydata3   ,Mydata4   ;  
                  //int   ii   =   0;  
   
                  //while   (ii++<m_basic.GetItemCount()){    
                  Mydata1   ="1";//m_basic.GetItemText(ii,0);  
                  Mydata2   ="2";//m_basic.GetItemText(ii,   1);  
                  Mydata3   ="3";//m_basic.GetItemText(ii,   2);  
                  Mydata4   ="4";//m_basic.GetItemText(ii,   3);  
  //}  
   
                  sSql.Format("INSERT   INTO   Raport   (Mydata1   ,Mydata2   ,Mydata3   ,Mydata4   )   VALUES   ('%s','%s','%s','%s')",   Mydata1   ,Mydata2   ,Mydata3   ,Mydata4   );  
                  database.ExecuteSQL(sSql);  
      }  
  }    
          database.Close();  
  AfxMessageBox("Excel&Icirc;&Auml;&frac14;&thorn;&ETH;&acute;&Egrave;&euml;&sup3;&Eacute;&sup1;&brvbar;&pound;&iexcl;");  
   
          CATCH_ALL(e)  
  {  
            TRACE1("Driver   not   installed:   %s",sDriver);  
  }  
          END_CATCH_ALL;  
  }  
  请问为什么Excel表中的列名能输入,空间的内容输入不进去! 问题点数:100、回复次数:5Top

1 楼zbplusplus(于是开始苏鲁之的堕落)回复于 2006-03-04 20:53:04 得分 0

用ODBC保存成dbf是可以的,ODBC操作excel有些问题  
  dbf是可以excel可以识别的Top

2 楼MapleInHG()回复于 2006-03-04 22:59:05 得分 0

可以用excel自动化做,如下的代码:  
              COleVariant   vOpt((long)DISP_E_PARAMNOTFOUND,   VT_ERROR);  
   
              //   Instantiate   Excel  
              _Application   oApp;  
              oApp.CreateDispatch("Excel.Application");  
              if   (!oApp)  
              {  
                      AfxMessageBox("Cannot   start   Excel.");  
                      return;  
              }  
   
              //Get   the   Workbooks   collection   so   that   you   can   add   a   new  
              //workbook  
              Workbooks   oBooks   =   oApp.GetWorkbooks();  
              _Workbook   oBook   =   oBooks.Add(vOpt);  
   
              //Get   the   Worksheets   collection   of   the   new   Workbook   so   that  
              //you   can   get   the   IDispatch   for   the   first   WorkSheet  
              Worksheets   oSheets   =   oBook.GetWorksheets();  
              _Worksheet   oSheet   =   oSheets.GetItem(COleVariant((short)1));  
   
              //***   ADD   DATA   TO   THE   WORKSHEET  
   
              //Add   Headers   to   Row   1   of   the   worksheet  
              Range   oRange;  
              oRange   =   oSheet.GetRange(COleVariant("A1"),   vOpt);  
              oRange.SetValue(COleVariant("Date"));  
              oRange   =   oSheet.GetRange(COleVariant("B1"),   vOpt);  
              oRange.SetValue(COleVariant("Order   #"));  
              oRange   =   oSheet.GetRange(COleVariant("C1"),   vOpt);  
              oRange.SetValue(COleVariant("Amount"));  
              oRange   =   oSheet.GetRange(COleVariant("D1"),   vOpt);  
              oRange.SetValue(COleVariant("Tax"));  
   
              //Create   a   safe   array   that   is   NUMROWS   x   3   --  
              //column   1   will   contain   dates   column   2   will   contain   strings  
              //and   column   2   will   contain   numbers  
              COleSafeArray   sa;  
              DWORD   dwElements[2];  
              dwElements[0]=   NUMROWS;         //Number   of   rows  
              dwElements[1]=   3;                     //Number   of   columns  
              sa.Create(VT_VARIANT,   2,   dwElements);  
   
              //Populate   the   safe   array   with   the   data  
              long   index[2];  
              long   lRow;  
              COleVariant   vTemp;  
              COleDateTime   vDateTime;  
              CString   s;  
   
              for(lRow=0;lRow<=NUMROWS-1;lRow++)  
              {  
                    index[0]   =   lRow;        
                     
                    //Fill   the   first   column   with   dates  
                    index[1]   =   0;  
                    vDateTime.SetDate(1999,   rand()%12,   rand()%28);  
                    sa.PutElement(index,   (COleVariant)vDateTime);  
   
                    //Fill   the   second   column   with   strings  
                    index[1]   =   1;  
                    s.Format("ORDR%d",   lRow+1000);  
                    vTemp   =   s;  
                    sa.PutElement(index,   vTemp);  
   
                    //Fill   the   third   column   with   numbers  
                    index[1]   =   2;  
                    vTemp   =   (long)rand();  
                    sa.PutElement(index,   vTemp);  
              }  
   
              //Fill   a   range,   starting   at   A2   with   the   data   in  
              //the   safe   array  
              oRange   =   oSheet.GetRange(COleVariant("A2"),   vOpt);  
              oRange   =   oRange.GetResize(COleVariant((short)NUMROWS),  
                                                                      COleVariant((short)3));  
              oRange.SetValue(sa);  
              sa.Detach();  
   
              //***   ADD   FORMULAS   TO   THE   WORKSHEET  
   
              //Fill   the   fourth   column   with   a   formula   to   compute   the  
              //sales   tax.   Note   that   the   formula   uses   a   "relative"  
              //cell   reference   so   that   it   fills   properly.  
              oRange   =   oSheet.GetRange(COleVariant("D2"),   vOpt);  
              oRange   =   oRange.GetResize(COleVariant((long)NUMROWS),    
                                                                  COleVariant((long)1));  
              oRange.SetFormula(COleVariant("=C2*0.07"));  
   
              //***   FORMAT   THE   WORKSHEET  
              oRange   =   oSheet.GetRange(COleVariant("A1"),   COleVariant("D1"));  
              Font   oFont   =   oRange.GetFont();  
              oFont.SetBold(COleVariant((short)TRUE));//Apply   Bold   to   Headers  
              oRange   =   oRange.GetEntireColumn();  
              oRange.AutoFit();                                         //AutoFit   the   columns   1:4  
   
              //Make   Excel   visible   and   give   the   user   control  
              oApp.SetVisible(TRUE);  
              oApp.SetUserControl(TRUE);  
  Top

3 楼bbbs(霞星焰日)回复于 2006-03-04 23:10:30 得分 0

本人有些马虎,里边字段没写对,这个程序可行。如果大家还有好点子或方法,欢迎提供!Top

4 楼bbbs(霞星焰日)回复于 2006-03-04 23:19:50 得分 0

显示常数可行了。但控件里的字段没显示出来?请大家多提宝贵意见Top

5 楼bbbs(霞星焰日)回复于 2006-03-04 23:36:09 得分 0

while   (ii++<m_basic.GetItemCount()){    
                  Mydata1   =m_basic.GetItemText(ii,0);  
                  Mydata2   =m_basic.GetItemText(ii,   1);  
                  Mydata3   =m_basic.GetItemText(ii,   2);  
                  Mydata4   =m_basic.GetItemText(ii,   3);  
  }  
  这句有问题么?为什么excel中不显示控件中的内容呢?Top

相关问题

  • Cell 控件导入 Excel 文件出错?
  • 求一控件(Excel数据导入SQL Server)
  • Excel控件
  • 怎样把DATAGRID控件中的数据(经过查询得到的结果)导入到EXCEL表中
  • 把excel表导入到datagrid控件中,运行时报错:不能更新。数据库或对象为只读
  • 最后80分求助:如何将ListCtrl控件中的数据导入到Excel中,请帮忙,急……
  • 关于CListCtrl控件
  • 关于CListCtrl控件????
  • 有关CListCtrl控件
  • 关于CListCtrl控件

关键词

  • excel
  • fdlg
  • spath
  • xls
  • ofn
  • frac
  • sfilename
  • npos
  • eth
  • cstring

得分解答快速导航

  • 帖主:bbbs

相关链接

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

广告也精彩

反馈

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