RT知道的朋友提醒下,谢谢了

解决方案 »

  1.   


    我采用网上看到的一篇文章
    http://blog.csdn.net/yzhangtong/archive/2006/10/10/1328273.aspx结果我在xp下导出正常,到了win7下就不能导出调试跟了下代码在代码
    if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
    位置
    xp可以创建文件,而win7下不能创建成功,不过程序也没有返回失败纠结ing
      

  2.   

    64 位机子没试过,我的 32 位 win7 系统,用网上的导出txt数据到excel表格的程序,正常运行并成功导出数据到excel
      

  3.   

    我有别人写的一个操作类
    我昨天刚在win7 64位下成功的,楼主留信箱发给你
      

  4.   

    class CExportData
    {
    public:
    CExportData(void);
    public:
    ~CExportData(void);public:
    BOOL MakeSurePathExists( CString &Path, bool FilenameIncluded);
    BOOL GetDefaultXlsFileName(CString& sExcelFile);
    void ExportListToExcel(CListCtrl* pList, CString strTitle);
    CString GetExcelDriver();
    };#include "StdAfx.h"
    #include "ExportData.h"
    #include <afxdb.h>
    #include <odbcinst.h>//使用ODBC操作EXCEL加的
    #include <io.h>//操作字符串需要加的
    #include "shlwapi.h"
    #include "LangCmsCnt.h"
    CExportData::CExportData(void)
    {
    }CExportData::~CExportData(void)
    {
    }void CExportData::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();
    // AfxMessageBox(sDriver);
    if (sDriver.IsEmpty())
    {
    // 没有发现Excel驱动
    MSG_BOX_ID(ID_STR_EXCEL_EXPT_TIP_NODIRVER);
    return;
    } ///默认文件名
    if (!GetDefaultXlsFileName(sExcelFile))
    return; // 创建进行存取的字符串
    sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),sDriver, sExcelFile, sExcelFile);
    //AfxMessageBox(sSql);
    // 创建数据库 (既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<8;i++)
    {
    if (i!=0)
    {
    sSql = sSql + _T(", ");
    strH = strH + _T(", ");
    }; sSql = sSql + _T(" [") + columnData.pszText +_T("] TEXT");
    strH = strH + _T(" [") + columnData.pszText +_T("] ");
    }
    columnName.ReleaseBuffer ();
    columnNum = i;
    sSql = _T("CREATE TABLE [") + tableName + _T("] ( ") + sSql +  _T(" ) "); database.ExecuteSQL(sSql); // 插入数据项
    int nItemIndex;
    for (nItemIndex=0;nItemIndex<pList->GetItemCount ();nItemIndex++)
    {
    strV = _T("");
    for(i=0;i<columnNum;i++)
    {
    if (i!=0)
    {
    strV = strV + _T(", ") ;
    }
    strV = strV + _T(" '") + pList->GetItemText(nItemIndex,i) +_T("' ");
    } sSql = _T("INSERT INTO ")+ tableName
    +_T(" (")+ strH + _T(")")
    +_T(" VALUES(")+ strV + _T(")");
    // AfxMessageBox(sSql);
    database.ExecuteSQL(sSql);
    } }      // 关闭数据库
    database.Close(); warningStr.Format(_T("%s%s!"), LOADSTRINGEX(ID_STR_EXCEL_EXPT_TIP_SUCCEED), sExcelFile);
    AfxMessageBox(warningStr);
    }
    }CString CExportData::GetExcelDriver()
    {
    TCHAR szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    TCHAR *pszBuf = szBuf;
    CString sDriver;
    // 获取已安装驱动的名称(涵数在odbcinst.h里)
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
    return _T("");
    // 检索已安装的驱动是否有Excel...
    do
      {
    if (StrStr(pszBuf, _T("Excel")) != 0)
    {
    //发现 !
    sDriver = CString(pszBuf);
    break;
    }
    StrChr(pszBuf, '\0');
    pszBuf += 1; }
    while (pszBuf[1] != '\0'); //return sDriver;
    return _T("Microsoft Excel Driver (*.xls)");
    }//获得默认的文件名
    BOOL CExportData::GetDefaultXlsFileName(CString& sExcelFile)
    {
    ///默认文件名:yyyymmddhhmmss.xls
    CString timeStr;
    CTime day;
    day=CTime::GetCurrentTime();
    int filenameday,filenamemonth,filenameyear,filehour,filemin,filesec;
    filenameday=day.GetDay();//dd
    filenamemonth=day.GetMonth();//mm月份
    filenameyear=day.GetYear();//yyyy
    filehour=day.GetHour();//hh
    filemin=day.GetMinute();//mm分钟
    filesec=day.GetSecond();//ss
    timeStr.Format(_T("%04d%02d%02d%02d%02d%02d"),filenameyear,filenamemonth,filenameday,filehour,filemin,filesec);
    //AfxMessageBox(timeStr);
    sExcelFile =  timeStr + _T(".xls");
    // prompt the user (with all document templates)
    CFileDialog dlgFile(FALSE,_T(".xls"),sExcelFile);
    CString title;
    CString strFilter; title = LOADSTRINGEX(ID_STR_EXCEL_EXPT_FILEDLG_TITLE);
    strFilter = LOADSTRINGEX(ID_STR_EXCEL_EXPT_FILTER);
    strFilter += (TCHAR)'\0';   // next string please
    strFilter += _T("*.xls");
    strFilter += (TCHAR)'\0';   // last string
    dlgFile.m_ofn.nMaxCustFilter++;
    dlgFile.m_ofn.nFilterIndex = 1; dlgFile.m_ofn.lpstrFilter = strFilter;
    dlgFile.m_ofn.lpstrTitle = title; if (dlgFile.DoModal()==IDCANCEL)
    return FALSE; // open cancelled
    sExcelFile = dlgFile.GetFileName();
    sExcelFile.ReleaseBuffer();
    if (MakeSurePathExists(sExcelFile,true)) 
    {
    if(!DeleteFile(sExcelFile)) 
    {    // delete the file
    MSG_BOX_ID(ID_STR_EXCEL_EXPT_TIP_OV_FAILED);
    return FALSE;
    }
    }
    return TRUE;
    }BOOL CExportData::MakeSurePathExists( CString &Path, bool FilenameIncluded)
    {
    int Pos=0;
    while((Pos=Path.Find('\\',Pos+1))!=-1)
    CreateDirectory(Path.Left(Pos),NULL);
    if(!FilenameIncluded)
    CreateDirectory(Path,NULL); return !_access((char *)Path.GetBuffer(0),0);
    }
    应该可以..
      

  5.   

    是不是excel版本的问题,保存成03和保存成07版本用的SAVEAS里面的参数不同