分成两个部分:
1、从listview中读出数据
2、向excel中写入数据。
//在csdn中就可以找到答案

解决方案 »

  1.   

    void CDlgCount::OnBnClickedBtnexcel()
    {
    CString strPathName;
    m_ctrlPathName.GetWindowText(strPathName); CString  strPath,strSuffix;  // 后缀
    for( int k=strPathName.GetLength(); k>=0; k-- ){
    if (strPathName.GetAt(k) == _T('\\')){
    strPath=strPathName.Left(k);
    strSuffix=strPathName.Right(strPathName.GetLength()-k);
    break;
    }
    }
    if(strPath.GetLength()<3)
    strPath=strPath+"\\";  //如果是根目录 要加上"\\",否则判断出问题
    if(strSuffix.GetLength()<5||strSuffix.Right(4)!=".xls")
    {
    AfxMessageBox("文件名不合法", MB_OK|MB_ICONEXCLAMATION);
    return;
    }
    if(CPathDialog::MakeSurePathExists(strPath)==0)
    {
    CString strTemp; 
    DeleteFile(strPathName); 
    CSpreadSheet dataFile(strPathName, "DataSheet");
    CStringArray sampleArray;
    CStringArray strRow;
    sampleArray.RemoveAll();
    sampleArray.Add("BOM号");
    sampleArray.Add("型号");
    sampleArray.Add("工序");
    sampleArray.Add("完成数量");
    sampleArray.Add(strAtten);
    dataFile.AddHeaders(sampleArray);   
    dataFile.BeginTransaction();
    for(int i=0;i<iRow;i++)
    {
    for(int j=1;j<=iColumn;j++)
    {
    strTemp.Empty();
    strTemp=m_ctrlList.GetItemText(i,j);
    strRow.Add(strTemp);
    }
    dataFile.AddRow(strRow);
    strRow.RemoveAll();
    }
    dataFile.Commit();  
    }
    }
      

  2.   

    第一种方法,简单的,用CDatabase实现. 程序是一个基于对话框的,步骤:    A,为了避免代码重复,设置下面几个全局变量(类范围的),要引入头文件<afxdb.h>              CDatabase m_db;                     //数据库
                 CString m_dbdriver;                 //要生成的EXCEL文件的目录
                 char m_path[MAX_PATH];       //获取路径用的数组
                   CString m_strdir;                      //包括EXCEL文件名在内的路径名.
                   CString m_strsql;                    //SQL命令语句,用m_db可直接执行.B,在OnInitDialog方法中,生成一个xls文件,并插入两条记录,可在TRY语句中进行,因为这里面要创建一张表,当再次启动程序时,会有异常发生,说表已经存在了,这时就避免了重复创建和插入.代码如下:m_dbdriver="MICROSOFT EXCEL DRIVER (*.XLS)";
     GetCurrentDirectory(MAX_PATH,m_path);
     m_strdir=m_path;
     m_strdir+="//test.xls";             //上面初始化各个变量.
     m_strsql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_dbdriver,m_strdir,m_strdir);
     TRY
     { 
      if (m_db.OpenEx(m_strsql,CDatabase::noOdbcDialog))
      {
       m_strsql="Create Table OdbcExl(Name Text,Age Number,Gener Text)";
       m_db.ExecuteSQL(m_strsql);
       m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Bob',34,'Male')";
       m_db.ExecuteSQL(m_strsql);
       m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Jane',23,'Female')";
       m_db.ExecuteSQL(m_strsql);   m_db.Close();
      }
     
     }
     CATCH_ALL(e)
     {
     // e->ReportError();
      m_db.Close();
      return FALSE;
     }
     END_CATCH_ALL;C,其实上面已经达到了答题人的要求,但作为一个程序,这也太不像话了,于是我又稍微加了点不值一提的东西,在对话框上输入信息,再插入到EXCEL表中去,这一切都在按下"插入"按钮后发生: UpdateData(); m_strsql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", m_dbdriver,m_strdir,m_strdir); TRY
     { 
      if (m_db.OpenEx(m_strsql,CDatabase::noOdbcDialog))
      {
       m_strsql.Format("Insert into OdbcExl(Name,Age,Gener)Values('%s',%d,'%s')",m_name,m_age,m_gener);
       m_db.ExecuteSQL(m_strsql);
      }
     }
     CATCH_ALL(e)
     {
      e->ReportError();
     // db.Close();
     }
     END_CATCH_ALL;
     m_db.Close();可以说,只要对CDatabase稍有了解,对SQL语句稍有了解,这个问题就很容易解决,如果要说这是一个针对Excel文件操作的方法,那是因为在OpenEx初始化数据库对象(不是"打开"哦)时用的文件后缀名为.xls而已,我们可以像在普通的数据库中一样进行其他操作,如用SELECT语句来读取EXCEL文件的内容等
      

  3.   

    看看这个吧
    http://wenku.baidu.com/view/669210c3d5bbfd0a79567350.html