Ошибка операции с неверным вариантом - PullRequest
0 голосов
/ 31 июля 2011

Может быть цель ... У меня есть файл xls excel 2003 ... В первых столбцах первого листа есть пять символов a два b ...

С моим кодом delphi я хочувывод такой, что .. Этот файл имеет 5 символов a, два символа 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 ]

2 голосов
/ 01 августа 2011

Чтобы получить доступ к значению из ячейки, вы должны использовать свойство value

попробуйте это

  repeat
    if uygulama.ActiveSheet.cells[i, 1].value = 'a' then
      inc(w);
  until uygulama.ActiveSheet.cells[i, 1].value = '';
0 голосов
/ 01 августа 2011

Предполагая, что вы уже выяснили, как получить значение ячейки, есть несколько моментов, касающихся вашего кода, которые я хочу сделать.

  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);
    
...