vc将两个listcontrol导出一个excel表格


有两个listcontrol,想把它合成一个,导出一个excel,记录一下,一个是p_lista,一个是p_listb,   直接上代码:

 void CSetClass::OnBnClickedOut()
{
    if((p_lista.GetItemCount()<=0)||(p_listb.GetItemCount()<=0))
    {
        AfxMessageBox("列表中没有记录保存");
        return;
    }
    CString FileName;
    CTime time=CTime::GetCurrentTime();
    FileName=time.Format("分类备份%Y%m%d%H%M");//分类备份%Y-%m-%d%H:%M

    
    CFileDialog dlg(FALSE,"xls",FileName,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Excel 文件(*.xls)|*.xls||");

    dlg.m_ofn.lpstrTitle="文件列表另存为";

    if(dlg.DoModal()!=IDOK)
        return;
    CString strFilePath;
    //获取文件路径名
    strFilePath=dlg.GetPathName();
    //判断文件是否存在,存在则删除重建
    DWORD dwRe=GetFileAttributes(strFilePath);
    if(dwRe!=(DWORD)-1)
    {
        DeleteFile(strFilePath);
    }

    CDatabase  database; 
    CString sDriver="MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动
    CString sSql,strInsert;
    try{
        //创建进行存取的字符串
        sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, strFilePath, strFilePath);

        //创建数据库
        if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
         {
           //获得列别框总列数
           int iColumnNuma,iRowCounta,iColumnNumb,iRowCountb;
           LVCOLUMN lvCola,lvColb;
           CString strColNamea,strColNameb; //用于保存列标题名称
           int ia,ja,ib,jb; //列、行循环参数
         
           iColumnNuma = p_lista.GetHeaderCtrl()->GetItemCount();
           iRowCounta = p_lista.GetItemCount();

           iColumnNumb = p_listb.GetHeaderCtrl()->GetItemCount();
           iRowCountb = p_listb.GetItemCount();

           sSql = " CREATE TABLE DSO_DX ( ";
           strInsert = " INSERT INTO DSO_DX ( " ;
           
           //获得列标题名称
           lvCola.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
           lvCola.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
           lvCola.pszText = strColNamea.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。

           lvColb.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
           lvColb.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
           lvColb.pszText = strColNameb.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。

           //以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
            for( ia=0 ; ia< iColumnNuma ; ia++ )
            {
                if ( !(p_lista.GetColumn(ia,&lvCola)) )
                    return;
                if ( ia<iColumnNuma-1 )
                {
                    sSql = sSql + lvCola.pszText + " TEXT , ";
                    strInsert = strInsert + lvCola.pszText + " , ";
                }
                else
                {
                     sSql = sSql + lvCola.pszText + " TEXT , ";
                     strInsert = strInsert + lvCola.pszText + " , ";

                     for( ib=0 ; ib< iColumnNumb ; ib++ )
                    {
                        if ( !(p_listb.GetColumn(ib,&lvColb)) )
                            return;
                        if ( ib<iColumnNumb-1 )
                        {
                            sSql = sSql + lvColb.pszText + " TEXT , ";
                            strInsert = strInsert + lvColb.pszText + " , ";
                        }
                        else
                        {
                             sSql = sSql + lvColb.pszText + " TEXT ) ";
                             strInsert = strInsert + lvColb.pszText + " )  VALUES ( ";
                        }
                     }

                }
             }
            b
            
            //创建Excel表格文件
            database.ExecuteSQL(sSql);
             //循环提取记录并插入到EXCEL中
            sSql = strInsert;
            char chTemp[33];
            for ( ja=0 ; ja<((iRowCounta>=iRowCountb)?iRowCounta:iRowCountb); ja++ )
            {
                memset(chTemp,0,33);
                for ( ia=0 ; ia<iColumnNuma ; ia++ )
                {
                     p_lista.GetItemText(ja,ia,chTemp,33);

                     if ( ia < (iColumnNuma-1) )
                     {
                         sSql = sSql + "'" + chTemp + "' , ";
                      }
                     else
                     {
                         sSql = sSql + "'" + chTemp + "' , ";
                     }
                }
                     /
                 for ( ib=0 ; ib<iColumnNumb ; ib++ )
                {
                     p_listb.GetItemText(ja,ib,chTemp,33);

                     if ( ib+4 < (iColumnNumb+3) )
                     {
                         sSql = sSql + "'" + chTemp + "' , ";
                      }
                     else
                     {
                         sSql = sSql + "'" + chTemp + "' ) ";
                     }
                }

                //将记录插入到表格中
                database.ExecuteSQL(sSql);
                sSql = strInsert;
              }
        }     

    // 关闭Excel表格文件
      database.Close();
     // AfxMessageBox("保存查询结果为Excel文件成功!");
     // AfxMessageBox(_T("保存查询结果为Excel文件成功!"), MB_OK | MB_ICONINFORMATION);
      MessageBox(_T("保存查询结果为Excel文件成功!"),"提示",0);

    }

    catch/*CATCH_ALL*/(CDBException* e)
     {
      //错误类型很多,根据需要进行报错。
    //    AfxMessageBox(e.Description());
        
         AfxMessageBox(e->m_strError);
     }
   }



转载于:https://my.oschina.net/lvguidong/blog/541928

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值