我最近做个程序,需要用VC在EXCEL表里寻找一个字符,比如,|“192.33元”,需要找到后返回该单元格行和列  比如“A3”,使用find找到,使用GetAddress获得地址,但是在使用FindNext时出现问题,不继续往下找,出现死循环,请大家帮忙看看,参数该如何设置,我想应该是After参数。油箱:[email protected]
void CAutoWorkDlg::OnBnClickedButtonReadfile()
{
// TODO: 在此添加控件通知处理程序代码
//记录工作表总数.
int iSheetNums=0;
//记录工作表中找到的行数,列数,找到的MAC地址总数(不能大于1)
int iNumRows=0,iNumCols=0,iMacNum=0;
CString strFindFirst,strFindNext;

_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
//记录工作表总Range,行Range,列Range
Range range,rgTotal,rgRows,rgCols,rgtemp;
Font font; //接口指针
LPDISPATCH lpDisp,lpDispTemp=NULL;  COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),covTemp;
if( !app.CreateDispatch("Excel.Application") )
{
this->MessageBox("无法创建Excel应用!");
return;
}

app.SetVisible(TRUE);
books=app.GetWorkbooks();
lpDisp = books.Open(COleVariant("c:\\1.xls"),covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional);
book.AttachDispatch( lpDisp );
sheets=book.GetSheets();
//工作表总数
iSheetNums=sheets.GetCount(); for (int i=1;i<=1;i++)
{
sheet = sheets.GetItem(COleVariant((short)i));
sheet.Activate(); rgTotal.AttachDispatch(sheet.GetUsedRange());
// rgCols.AttachDispatch(rgTotal.GetColumns());
// rgRows.AttachDispatch(rgTotal.GetRows());// iNumRows=rgRows.GetCount();
// iNumCols=rgCols.GetCount();// range.AttachDispatch(sheet.GetUsedRange());
// range.AttachDispatch(rgTotal.Find(COleVariant("0018-82B1-69B6"),covOptional,COleVariant((long)-4123),COleVariant((long)2),COleVariant((long)1),(long)1,COleVariant((long)0),COleVariant((long)0),covOptional));
// covTemp=rgtemp.Activate();
// range.GetAddress(covOptional,covOptional,(long)1,covOptional,covOptional);
lpDisp=rgTotal.Find(COleVariant("0018-82B1-69B6"),covOptional,COleVariant((long)-4123),COleVariant((long)2),COleVariant((long)1),(long)1,COleVariant((long)0),COleVariant((long)0),covOptional);
if(lpDisp)
{
range.AttachDispatch(lpDisp);
strFindFirst=range.GetAddress(covOptional,covOptional,(long)1,covOptional,covOptional);
range.Select();
range.Activate();
// range.SetFormula(range.GetFormula());
iMacNum=iMacNum+1;
do
{
lpDispTemp=rgTotal.FindNext(covOptional);
range.AttachDispatch(lpDispTemp);
// range.SetFormula(range.GetFormula());
// range.GetFormula();
strFindNext=range.GetAddress(covOptional,covOptional,(long)1,covOptional,covOptional);
range.Select();
range.Activate();
if(strFindNext!=strFindFirst)
iMacNum=iMacNum+1;
}
while(lpDispTemp!=NULL);
}
if(iMacNum>1)
{
AfxMessageBox("找到的MAC地址大于1个,不唯一,请仔细检查EXCEL表!");
book.SetSaved(TRUE);
book.Close(covOptional,COleVariant(CStringToFilePath(m_strFilePath)),covOptional);
books.Close();
app.Quit();
return;
}
}
// sheet=sheets.GetItem(COleVariant((short)1));
// range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
// COleVariant rValue,gValue;
// rValue=COleVariant(range.GetValue(gValue));
// rValue.ChangeType(VT_BSTR);
// this->MessageBox(CString(rValue.bstrVal));
book.SetSaved(TRUE);
book.Close(covOptional,COleVariant(CStringToFilePath(m_strFilePath)),covOptional);
books.Close();
app.Quit();
}