我在s=var.bstrVal;///////此处设了跟踪
前面加了一句: s="";
然后跟踪这个变量的内容,还是路径名,这是怎么回事?怎么改变不了s的内容

解决方案 »

  1.   

    while(s!="")
    这句不好
    有没有函数得到你的excel中有多少条记录,然后用for循环
      

  2.   

    获取单元格的数据
    应该用objRange1.GetValue()
    而不是var=objRange1.GetFormulaR1C1();
      

  3.   


    用了下面几个变量获取列数行数:
    int hangshu=objRange1.GetCount();
         int hangshu1=objRange1.GetColumn();
         LPDISPATCH hangshu2=objRange1.GetColumns();
        int lieshu1=objRange1.GetRow();
    LPDISPATCH lieshu2=objRange1.GetRows();
    然后结果显示:
     -858993460
     -858993460
     -858993460
      0xcccccccc
      

  4.   

    objRange1=objApp.GetRange(_variant_t(s1),_variant_t(s1));objApp 为 objRange 试试看
      

  5.   

    给最后一行设置一个特殊的字符串XXXXX,然后while(s != "XXXXX")
      

  6.   

    有几个问题需要确认一下
    1.你刚做好的时候和现在的程序有区别吗?还是你的程序开始运行没问题,运行了一段时间有问题?
    2.如果是你的程序开始运行没问题,运行了一段时间有问题,那么你有没有检查一下excel表数据,是否有问题?
      

  7.   

    刚做好的和现在做好的不一样,刚做好的程序一直没问题,现在做好的那个刚完成时没发现问题,现在发现不能运行了。
    刚做好的和现在做好的区别在于:
    刚做好的是点击一个按钮,弹出目录浏览框,选择一个excel文件,开始导入数据;
    现在做的是点击一个按钮,弹出目录浏览框,选择一个文件夹,然后遍历里面的文件,导入文件夹里我想导入数据的多个文件
      

  8.   

    遍历文件的代码:
    void CCheckFileDemoDlg::OnSearch() //遍历当前目录下的文件
    {
    // TODO: Add your control notification handler code here
    CString oldDir;//保存原始的当前路径
    btname=initname;
    jfname=initname;
    qzdname=initname;
    BOOL bt,jf,qzd;
    bt=0;
    jf=0;
    qzd=0;
    UpdateData(true);//获取输入数据
    GetCurrentDirectory(50,(LPTSTR)(LPCTSTR)oldDir);//获取当前路径
    if(!SetCurrentDirectory((LPCTSTR)m_folder)||m_folder.IsEmpty())//如果有输入
    {
    m_folder=(LPCTSTR)oldDir;
    UpdateData(false);
    }
    while(m_fileList.GetCount()!=0)//清空列表框
    {
    int index=m_fileList.GetTopIndex();
    m_fileList.DeleteString(index);
    }
    FindFile(CString(m_folder));//开始查找
    m_filenum=m_fileList.GetCount();//获取文件数目
    UpdateData(false);//编辑框显示
    SetCurrentDirectory((LPCTSTR)oldDir);//恢复当前目录

    daorubiaotou1 = "开始导入邮寄表头数据...";
    daorujifei1 = "开始导入邮寄计费数据...";
    daoruqizhidu1 = "开始导入邮寄起止度数据...";
    daochuhuizong1 = "数据转换中...";
    daorubiaotou2 = "邮寄表头数据导入完毕!";
    daorujifei2 = "邮寄计费数据导入完毕!";
    daoruqizhidu2 = "邮寄起止度数据导入完毕!";
    daochuhuizong2 = "数据转换已完成,保存在数据源文件所在目录!";
    if (strstr(btname,initname)==NULL)
    {
    DaoRuBiaoTou();
    bt=1;
    }
    else{
    CString temp="没找到邮寄表头文件";
    AfxMessageBox(temp);
    }
    if (strstr(jfname,initname)==NULL)
    {
    DaoRuJiFei();
    jf=1;
    }
    else{
    CString temp="没找到邮寄计费文件";
    AfxMessageBox(temp);
    }
    if (strstr(qzdname,initname)==NULL)
    {
    DaoRuQiZhiDu();
    qzd=1;
    }
    else{
    CString temp="没找到邮寄起止度文件";
    AfxMessageBox(temp);
    }
    if (bt&&jf&&qzd)
    {
    DaoChuHuiZong();
    }
    else{
    CString temp="原始文件不齐,无法执行数据转换";
    AfxMessageBox(temp);
    }


    }void CCheckFileDemoDlg::OnFolder() 
    {
    // TODO: Add your control notification handler code here
    CString strFilter,str;
    BROWSEINFO bi;
    char name[MAX_PATH];
    ZeroMemory(&bi,sizeof(BROWSEINFO));
    bi.hwndOwner = GetSafeHwnd();
    bi.pszDisplayName = name;
    bi.lpszTitle = "Select folder";
    //bi.ulFlags = BIF_USENEWUI;
    bi.ulFlags = BIF_RETURNFSANCESTORS;
    LPITEMIDLIST idl = SHBrowseForFolder(&bi);
    if(idl == NULL)
    return;
    SHGetPathFromIDList(idl, str.GetBuffer(MAX_PATH));
    str.ReleaseBuffer();
    m_folder = str;//为对话框中与一编辑框对应的CString型变量,保存并显示选中的路径。
    if(str.GetAt(str.GetLength()-1)!='\\')
    m_folder+="\\";
    UpdateData(false);
    }void CCheckFileDemoDlg::FindFile(CString Curdir)
    {
    HANDLE hfile;//查找文件句柄
    WIN32_FIND_DATA wfdata;//文件信息结构
    BOOL IsOver=false;//查找过程结束标志
    CString strname;//文件名
    CString strfull;//全路径
    CString tpbiaotou,tpjifei,tpqizhidu;
    tpbiaotou="表头";
    tpjifei="计费";
    tpqizhidu="起止度";
    hfile=FindFirstFile((LPCTSTR)("*.*"),&wfdata);//查找第一个文件
    if(hfile==INVALID_HANDLE_VALUE)
    IsOver=true;//查找过程结束
    while(!IsOver)
    {
    strname.Format("%s",wfdata.cFileName);//获取找到的文件名
    strfull=Curdir+"\\"+strname;//全路径
    if((wfdata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)&&(wfdata.cFileName[0]!=_TEXT('.')))//
    {
    SetCurrentDirectory(wfdata.cFileName);
    FindFile(strfull);//递归调用
    SetCurrentDirectory("..");//返回当前目录
    }
    else if(wfdata.cFileName[0]!=_TEXT('.'))
    m_fileList.AddString(strfull);
    if (!strstr(strfull,tpbiaotou)==NULL)
    {
    btname=strfull;
    //AfxMessageBox(btname);
    }
    if (!strstr(strfull,tpjifei)==NULL)
    {
    jfname=strfull;
    //AfxMessageBox(jfname);
    }
    if (!strstr(strfull,tpqizhidu)==NULL)
    {
    qzdname=strfull;
    //AfxMessageBox(qzdname);
    }
    IsOver=!FindNextFile(hfile,&wfdata);//查找下一个文件
    }

    FindClose(hfile);//关闭句柄
    }
      

  9.   

    我估计是你选择的目录下的某些EXCEL文件导致了你程序的问题,你可以先选择你目录下的部分excel文件测试,如果发现问题,那么在选择的部分EXCEL文件中再缩小范围,知道定位到引起问题的EXCEL文件,然后看到底是什么问题
      

  10.   

    很明显下面的出问题了!
    objRange1=objApp.GetRange(_variant_t(s1),_variant_t(s1));
            var=objRange1.GetFormulaR1C1();
            s=var.bstrVal;