使用Delphi读取Excel单元格批注时如何判断是否存在批注?
搜索以前的帖子 发现有这么回答的
if ExcelWS.Cells.Item[11,6].Comment <> nil then 
PZ:=ExcelWS.Cells.Item[11,6].Comment.Text(EmptyParam,EmptyParam,EmptyParam); 但是编译不过 [Error] MainF.pas(11727): Incompatible types
经测试.Comment 不能用 nil 来判断
请问是哪里出错了,还是有其他方法呢?

解决方案 »

  1.   


    procedure TForm1.Button13Click(Sender: TObject);
    var
      FExcel: Variant;
      FWorkbook: Variant;
      FWorksheet: Variant;
      i, j: integer;
      s: string;
      //comText, comStart, comOverwrite : OleVariant;
    begin
      if not OpenDialog1.Execute then
        exit;
     
      Screen.Cursor := crHourGlass;
     
      try
        FExcel := CreateOleObject('excel.application');
      except
        Screen.cursor := crDefault;
        MessageDlg('Could not start Microsoft Excel!', mtError, [mbCancel], 0);
        Exit;
      end;
     
      try
        FWorkBook := FExcel.WorkBooks.Open(OpenDialog1.Filename);
        //FWorkSheet := FWorkBook.WorkSheets.Add;
        FWorkSheet := FWorkBook.WorkSheets[1];
        i := 5; j:= 3;//判断并读取第5行,第3列的注释
        try
          s := FWorkSheet.Cells[i, j].Comment.Text;
        except
          s := 'No Comment';//报异常表示没有注释
        end;
        {comText := EmptyParam;
        comStart := EmptyParam;
        comOverwrite := False;
        try
          s := FWorkSheet.Cells[i, j].Comment.Text(comText,comStart,comOverwrite);
        except
          s := 'Error';
        end;}    ShowMessage(s);
      finally
        Screen.Cursor := crDefault;
        FWorkBook.Close;
        FExcel.Quit;
      end;
    end;
      

  2.   

    try      s := FWorkSheet.Cells[i, j].Comment.Text;
    except      s := 'No Comment';//报异常表示没有注释
     end; 
    使用后,程序运行时出现“ OLE error 800A03EC” 弹框。
    求其他办法。
      

  3.   


    你使用的delphi, office版本是??
      

  4.   

    非常感谢,原来是OFFICE问题,现在不出错了,很好用! 谢谢!
    begin
           try
             begin
           temp:=myworkbook.worksheets[1].cells.item[xlsi,5+i].comment.text ;
           //ShowMessage(temp);
          myworkbook.worksheets[1].cells.item[xlsi,5+i].clearcomments;
            myworkbook.worksheets[1].cells.item[xlsi,5+i].addcomment(temp+';'+comment);
            end;
            except
               begin
                 myworkbook.worksheets[1].cells[xlsi,5+i].addcomment(comment);
               end;
             end;
            end;
    顺便问一下,我现在给批注赋值是先清除,后添加。。怎样直接修改?
    myworkbook.worksheets[1].cells.item[xlsi,5+i].comment.text :=temp+comment; 会报错
      

  5.   

    procedure TForm1.Button13Click(Sender: TObject);
    var
      FExcel: Variant;
      FWorkbook: Variant;
      FWorksheet: Variant;
      i, j: integer;
      s: string;
      //comText, comStart, comOverwrite : OleVariant;
    begin
      if not OpenDialog1.Execute then
        exit;
     
      Screen.Cursor := crHourGlass;
     
      try
        FExcel := CreateOleObject('excel.application');
      except
        Screen.cursor := crDefault;
        MessageDlg('Could not start Microsoft Excel!', mtError, [mbCancel], 0);
        Exit;
      end;
     
      try
        FWorkBook := FExcel.WorkBooks.Open(OpenDialog1.Filename);
        //FWorkSheet := FWorkBook.WorkSheets.Add;
        FWorkSheet := FWorkBook.WorkSheets[1];
        i := 5; j:= 2;
        {try
          s := FWorkSheet.Cells[i, j].Comment.Text;
        except
          s := 'No Comment';//
        end;
        ShowMessage(s);}    try
          FWorkSheet.Cells[i, j].addcomment;
        except
        end;
        FWorkSheet.Cells[i, j].comment.visible:=false;
        FWorkSheet.Cells[i, j].Comment.Text('abc123');//修改批注    {comText := EmptyParam;
        comStart := EmptyParam;
        comOverwrite := False;
        try
          s := FWorkSheet.Cells[i, j].Comment.Text(comText,comStart,comOverwrite);
        except
          s := 'Error';
        end;}
      finally
        FExcel.DisplayAlerts := False;
        FExcel.Save;//保存
        Screen.Cursor := crDefault;
        FWorkBook.Close;
        FExcel.Quit;
      end;
    end;