请教高手,如何将CListCtrl中的数据导出至excel中?
能否给点文章参考一下,谢谢了~

解决方案 »

  1.   

    在网上看到一篇帖子如下:///////////////////////////////////////////////////////////////////////////////
    //  void GetExcelDriver(CListCtrl* pList, CString strTitle)
    //  参数:
    //    pList    需要导出的List控件指针
    //    strTitle  导出的数据表标题
    //  说明:
    //    导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为”
    //    对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括
    //    列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。
    //  
    //  edit by [r]@dotlive.cnblogs.com
    ///////////////////////////////////////////////////////////////////////////////
    void ExportListToExcel(CListCtrl* pList, CString strTitle)
    {
      CString warningStr;
      if (pList->GetItemCount ()>0) {  
        CDatabase database;
        CString sDriver;
        CString sExcelFile;
        CString sSql;
        CString tableName = strTitle;
        
        // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
        sDriver = GetExcelDriver();
        if (sDriver.IsEmpty())
        {
          // 没有发现Excel驱动
          AfxMessageBox("没有安装Excel!
    请先安装Excel软件才能使用导出功能!");
          return;
        }
        
        ///默认文件名
        if (!GetDefaultXlsFileName(sExcelFile))
          return;
        
        // 创建进行存取的字符串
        sSql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s";DBQ=%s",sDriver,
              sExcelFile, sExcelFile);
        
        // 创建数据库 (既Excel表格文件)
        if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
        {
          // 创建表结构
          int i;
          LVCOLUMN columnData;
          CString columnName;
          int columnNum = 0;
          CString strH;
          CString strV;
          sSql = "";
          strH = "";
          columnData.mask = LVCF_TEXT;
          columnData.cchTextMax =100;
          columnData.pszText = columnName.GetBuffer (100);
          for(i=0;pList->GetColumn(i,&columnData);i++)              // 可能的错误
          {
            if (i!=0)
            {
              sSql = sSql + ", " ;
              strH = strH + ", " ;
            }
            sSql = sSql + " " + columnData.pszText +" TEXT";
            strH = strH + " " + columnData.pszText +" ";
          }
          columnName.ReleaseBuffer ();
          columnNum = i;
          sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) ";
          database.ExecuteSQL(sSql);
          
          // 插入数据项
          int nItemIndex;
          for (nItemIndex=0;nItemIndexGetItemCount ();nItemIndex++){         //可能的错误
            strV = "";
            for(i=0;iGetItemText(nItemIndex,i) +"'' ";                      //可能的错误
            }
            
            sSql = "INSERT INTO "+ tableName
              +" ("+ strH + ")"
              +" VALUES("+ strV + ")";
            database.ExecuteSQL(sSql);
          }
          
        }   
        
        // 关闭数据库
        database.Close();
          
        warningStr.Format("导出文件保存于%s!",sExcelFile);
        AfxMessageBox(warningStr);
      }
    }其中可能有一些错误,我在后面标出来了,请高手帮忙解释一下,谢谢~