变量操作错误无效

时间:2011-07-31 15:35:07

标签: delphi delphi-2010

可能目标是......我有一个xls excel 2003文件...在第一张表的第一列中,有五个两个b字符......

使用我的delphi代码,我想输出这样的.. 这个文件有5个字符,两个b字符..... 当我编译并运行程序时,它会给Invalid variant operation ...烦人... 完整的代码如下:

unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private { Private declarations }
  public { Public declarations }

  end;

var
  Form1: TForm1;

var
  uygulama: variant;

var
  i, w: integer; 
 // var str:string; 

implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  uygulama := CreateOleObject('Excel.Application');
  uygulama.visible := false;
  uygulama.Workbooks.open['c:\liste.xls'];

  // label1.Caption:=(uygulama.ActiveSheet.cells[1,1]);

  i := 1;
  w := 1;
  repeat
    if uygulama.ActiveSheet.cells[i, 1] = 'a' then
      inc(w);
  until uygulama.ActiveSheet.cells[i, 1] = '';

  Label1.Caption := inttostr(w);

end;

end.  

2 个答案:

答案 0 :(得分:2)

要从单元格访问值,您必须使用value属性

试试这个

  repeat
    if uygulama.ActiveSheet.cells[i, 1].value = 'a' then
      inc(w);
  until uygulama.ActiveSheet.cells[i, 1].value = '';

答案 1 :(得分:0)

假设您现在已经想出了如何获取单元格的值,那么我希望您的代码有几点。

  1. 重复循环将非常缓慢。最好在进入循环之前将单元格的值存储在局部变量中,然后对局部变量执行计数操作。

  2. 循环很有可能是无限的,因为你没有改变任何改变的值(除了w)。为什么不写点像

    s:= uygulama.activesheet.cells[i,1].value;
    w:= 0;
    for i:= 1 to length (s) do
      if s[i] = 'a' then inc (w);