可能目标是......我有一个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.
答案 0 :(得分:2)
要从单元格访问值,您必须使用value
属性
试试这个
repeat
if uygulama.ActiveSheet.cells[i, 1].value = 'a' then
inc(w);
until uygulama.ActiveSheet.cells[i, 1].value = '';
答案 1 :(得分:0)
假设您现在已经想出了如何获取单元格的值,那么我希望您的代码有几点。
重复循环将非常缓慢。最好在进入循环之前将单元格的值存储在局部变量中,然后对局部变量执行计数操作。
循环很有可能是无限的,因为你没有改变任何改变的值(除了w)。为什么不写点像
s:= uygulama.activesheet.cells[i,1].value;
w:= 0;
for i:= 1 to length (s) do
if s[i] = 'a' then inc (w);