怎么将CtrlList里边的资料用CFileDialog导出来(.csv格式的)?谢谢

解决方案 »

  1.   

    自己动手做。无非就是文件加上Excel写操作了。
      

  2.   

    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!\n请先安装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);
     }
    }
      

  3.   


    #import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE11\\MSO.DLL" rename( "RGB", "MSORGB" )
    using namespace Office;#pragma warning(disable : 4192)#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
    #import "D:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \
      rename( "DialogBox", "ExcelDialogBox" ) \
      rename( "RGB", "ExcelRGB" ) \
      rename( "CopyFile", "ExcelCopyFile" ) \
      rename( "ReplaceText", "ExcelReplaceText" )void CRecordView::OnFileExport()
    {
     TCHAR szFilter[] = { _T("Excel文件 (*.xls)|*.xls|所有文件 (*.*)|*.*||") };
     CFileDialog SaveDialog(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
     if (SaveDialog.DoModal() == IDOK)
     {
      _variant_t varOption((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  CWaitCursor wait;  try
      {
       Excel::_ApplicationPtr pExcelApp(_T("Excel.Application"));
       Excel::_WorkbookPtr pBook = pExcelApp->Workbooks->Add(varOption);
       Excel::_WorksheetPtr pSheet = pBook->ActiveSheet;   //Excel::RangePtr pRange = pSheet->GetRange(_T("A1"), _T("D1"));
       Excel::RangePtr pRange = pSheet->Cells;
       
       CHeaderCtrl* pHeader = m_wndList.GetHeaderCtrl();
       int nColumn = pHeader->GetItemCount();   { 
        TCHAR szText[40] = { 0 };
        HDITEM hdi = { 0 };
        hdi.mask = HDI_TEXT;
        hdi.pszText = szText;
        hdi.cchTextMax = 40;
        for (int i = 1; i < nColumn; i++)
        {
         pHeader->GetItem(i, &hdi);
         pRange->Item[1][i] = hdi.pszText;
        }    Excel::RangePtr pHeaderRange = pRange->GetRange(variant_t(_T("A1")), variant_t(_T("F1")));
        pHeaderRange->Font->Bold = true;
       }   for (int i = 0; i < m_wndList.GetItemCount(); i++)
       {
        for (int j = 1; j < nColumn; j++)
        {
         pRange->Item[i+2][j] = (LPCTSTR)m_wndList.GetItemText(i, j);
        }
       }   pRange = pRange->EntireColumn;
       pRange->AutoFit();   pBook->Close(true, (LPCTSTR)SaveDialog.GetPathName(), varOption);
       pExcelApp->Quit();   AfxMessageBox(_T("数据已成功导出到Excel表格中!"), MB_OK | MB_ICONINFORMATION);
      }
      catch (...)
      {
       AfxMessageBox(_T("导出数据错误!"), MB_OK | MB_ICONERROR);
       return;
      }
     }
    }