请问:如何将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表中的列名能输入,空间的内容输入不进去!

解决方案 »

  1.   

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

  2.   

    可以用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);
      

  3.   

    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中不显示控件中的内容呢?