我在EXCEL文件中设置了数据开始与结束的标记,开始为#start,结束为#end
用Range:=WorkSheet.UsedRange.Find('#start', LookIn := xlValues);查找
如果文件中有#start,则可以查到,但没有查到该怎么判断?
我调试的结果是没有查到时Range的值为$00000000,但用VarIsEmpty(Range)出错,请哪位高人指点一下

解决方案 »

  1.   

    Returns the contents of a cell as a shortstring}Function ExcelGetCellValue(Excel : Variant; RowNum, ColNum: Integer): ShortString;BeginResult := '';TryResult := Excel.Cells[RowNum, ColNum].Value;ExceptResult := '';End;End;
      

  2.   

    可以用ADO连嘛.再把它反应到DBGRID的中.用dataset的数据集来做.用locate就可以了.
    像数据库一样,又简单又方便.可以用搜的.EXCEL很多这方面的文章.
      

  3.   

    zhb79(zhb):
    我装的excel2003,用ADO的JET 4.0 OLEDB连的时候提示“不可识别的数据库格式”,你知道哪有ADO的最新版本吗?
      

  4.   

    给你一段专门用于Excel中查找的代码、转自EX-EX{Returns The Last Column}
    Function ExcelLastCol(Excel : Variant): Integer;
    Var
     CurRow : Integer;
     CurCol : Integer;
    Begin
     Result := 1;
     Try
       CurRow := Excel.ActiveCell.Row;
       CurCol := Excel.ActiveCell.Column;
       Result := CurCol;
       Excel.Selection.End[xlToRight].Select;
       Result := Excel.ActiveCell.Column;
       Excel.ActiveSheet.Cells[CurRow, CurCol].Select;
     Except
     End;
    End;{Returns The Last Row}
    Function ExcelLastRow(Excel : Variant): Integer;
    Var
     CurRow : Integer;
     CurCol : Integer;
    Begin
     Result := 1;
     Try
       CurRow := Excel.ActiveCell.Row;
       CurCol := Excel.ActiveCell.Column;
       Result := CurRow;
       Excel.Selection.End[xlDown].Select;
       Result := Excel.ActiveCell.Row;
       Excel.ActiveSheet.Cells[CurRow, CurCol].Select;
     Except
     End;
    End;{Returns The First Row}
    Function ExcelFirstRow(Excel : Variant): Integer;
    Var
     CurRow : Integer;
     CurCol : Integer;
    Begin
     Result := 1;
     Try
       CurRow := Excel.ActiveCell.Row;
       CurCol := Excel.ActiveCell.Column;
       Result := CurRow;
       Excel.Selection.End[xlUp].Select;
       Result := Excel.ActiveCell.Row;
       Excel.ActiveSheet.Cells[CurRow, CurCol].Select;
     Except
     End;
    End;{Returns The First Col}
    Function ExcelFirstCol(Excel : Variant): Integer;
    Var
     CurRow : Integer;
     CurCol : Integer;
    Begin
     Result := 1;
     Try
       CurRow := Excel.ActiveCell.Row;
       CurCol := Excel.ActiveCell.Column;
       Result := CurRow;
       Excel.Selection.End[xlToLeft].Select;
       Result := Excel.ActiveCell.Column;
       Excel.ActiveSheet.Cells[CurRow, CurCol].Select;
     Except
     End;
    End;{Returns the contents of a cell as a shortstring}
    Function ExcelGetCellValue(Excel : Variant; RowNum, ColNum: Integer): ShortString;
    Begin
     Result := '';
     Try
       Result := Excel.Cells[RowNum, ColNum].Value;
     Except
       Result := '';
     End;
    End;Function ExcelFindValue(
     Excel       : Variant;
     FindString  : ShortString;
     TopRow      : Integer;
     LeftCol     : Integer;
     LastRow     : Integer;
     LastCol     : Integer;
     SearchRight : Boolean;
     SearchDown  : Boolean;
     RowsFirst   : Boolean
     ): Boolean;
    Var
     CurRow    : Integer;
     CurCol    : Integer;
     TopRowN   : Integer;
     LeftColN  : Integer;
     LastRowN  : Integer;
     LastColN  : Integer;
     ColLoop   : Integer;
     RowLoop   : Integer;
     CellValue : ShortString;
     FoundRow  : Integer;
     FoundCol  : Integer;
     Found     : Boolean;
    Begin
     Result := False;
     Try
       Found      := False;
       FindString := UpperCase(FindString);
       CurRow     := Excel.ActiveCell.Row;
       CurCol     := Excel.ActiveCell.Column;
       FoundRow   := CurRow;
       FoundCol   := CurCol;   If SearchRight Then
       Begin
         LeftColN := LeftCol;
         LastColN := LastCol;
       End
       Else
       Begin
         LeftColN := LastCol;
         LastColN := LeftCol;
       End;   If SearchDown Then
       Begin
         TopRowN  := TopRow;
         LastRowN := LastRow;
       End
       Else
       Begin
         TopRowN  := LastRow;
         LastRowN := TopRow;
       End;
       If RowsFirst Then
       Begin
         For ColLoop := LeftColN To LastColN Do
         Begin
           For RowLoop := TopRowN To LastRowN Do
           Begin
             CellValue := ExcelGetCellValue(Excel,RowLoop, ColLoop);
             If UpperCase(CellValue) = FindString Then
             Begin
               FoundRow := RowLoop;
               FoundCol := ColLoop;
               Found    := True;
               Break;
             End;
           End;
           If Found Then Break;
         End;
       End
       Else
       Begin
         For RowLoop := TopRowN To LastRowN Do
         Begin
           For ColLoop := LeftColN To LastColN Do
           Begin
             CellValue := ExcelGetCellValue(Excel,RowLoop, ColLoop);
             If UpperCase(CellValue) = FindString Then
             Begin
               FoundRow := RowLoop;
               FoundCol := ColLoop;
               Found    := True;
               Break;
             End;
           End;
           If Found Then Break;
         End;
       End;
       Excel.Cells[FoundRow, FoundCol].Activate;
       Result := Found;
     Except
       Result := False;
     End;
    End;{Finds A value in a range and moves the cursor there.  If the value is
    not found then the cursor does not move.  If nothing is found then
    false is returned, True otherwise.}
    Function ExcelFindInRange(
     Excel       : Variant;
     FindString  : ShortString;
     TopRow      : Integer;
     LeftCol     : Integer;
     LastRow     : Integer;
     LastCol     : Integer): Boolean;
    Begin
     Result :=
       ExcelFindValue(
         Excel,
         FindString,
         TopRow,
         LeftCol,
         LastRow,
         LastCol,
         True,
         True,
         True);
    End;{Finds A value and moves the cursor there.  If the value is
    not found then the cursor does not move.  If nothing is found then
    false is returned, True otherwise.}
    Function ExcelFind(
     Excel       : Variant;
     FindString  : ShortString): Boolean;
    Begin
     Result :=
       ExcelFindInRange(
         Excel,
         FindString,
         ExcelFirstRow(Excel),
         ExcelFirstCol(Excel),
         ExcelLastRow(Excel),
         ExcelLastCol(Excel));
    End;调用例子:uses
      Comobj;procedure TForm1.Button1Click(Sender: TObject);
    var
      AExcel: Variant;
    begin
      try
        AExcel := GetActiveOleObject('Excel.Application');
        AExcel.Application.Visible := True;
        ExcelFind(AExcel, 'Delphi');
      except
        raise;
      end;
    end;
      

  5.   

    解决了!
    用if Assigned(@Range) then 判断,谢谢各位