Импорт данных их Excel в Delphi

всем привет,нашел ссылку на этом форуме на хорошую книгу 'Программирвоание документов и приложений ms office в delphi' и по ней учусь,но проблемы все равно возникли,перейду к делу: пишу прогу которая будет импортировать данные из Excel в мою прогу в stringgrid.
var
 Form1: TForm1;
 var e,sheet:variant;
 a:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 e:=createoleobject('excel.application');
 if opendialog1.Execute then
 e.workbooks.open(opendialog1.FileName);
 e.visible:=true;
end;

procedure TForm1.ImportButtonClick(Sender: TObject);
var eee:string;
begin
for a:=1 to 10 do
 begin
 eee:=e.sheet.cells[a,1];
 stringgrid1.Cells[a,1]:=eee;
 end;

end;
прога запускается и excel тоже открывается,но когда я нажимаю кнопку Import то вылезает ошибка 'method sheet not supported by automation object' вобщем подскажите что да как,я с этим не работал,обещаю поставить плюсик кто поможет))
2 ответа

procedure TForm1.Button1Click(Sender: TObject);
const
xlcelltypelastcell = $0000000b;
var
e, sheet: olevariant;
rangematrix: variant;
x, y, k, r: integer;
begin
result := false;
e := createoleobject('excel.application');
if opendialog1.Execute then
e.workbooks.open(opendialog1.FileName);
try
e.workbooks.open(opendialog1.FileName);
e.visible := true;
sheet:=e.workbooks[extractfilename(opendialog1.FileName)].worksheets[1];
e.cells.specialcells(xlcelltypelastcell,emptyparam).activate;
x := e.activecell.row;
y := e.activecell.column;
stringgrid1.rowcount:=x;
stringgrid1.colcount:=y;
rangematrix := e.range['a1', e.cells.item[x, y]].value;
k := 1;
repeat
for r := 1 to y do
stringgrid1.cells[(r - 1), (k - 1)] := rangematrix[k, r];
inc(k, 1);
stringgrid1.rowcount := k + 1;
until k > x;
rangematrix := unassigned;
finally
if not varisempty(e) then
begin
e.quit;
e := unassigned;
sheet := unassigned;
result := true;
end;
end;
end;
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#". Только... И не значком #. И не РНР-кодом. И не значком цитаты. И не собственными "ручками". Вы не знали? Почитайте правила раздела... Модератор


Зачем мне эта билибирда?по моему
procedure TForm1.ImportButtonClick(Sender: TObject);
var eee:string;
begin
for a:=1 to 10 do
 begin
 eee:=e.sheet.cells[a,1];
 stringgrid1.Cells[a,1]:=eee;
 end;
этот код лучше и легче просто тут какая то маленькая ошибка,может кто нибудь поможет исправить именно этот код?просто мне там понятнее вот так получилось
procedure TForm1.Button3Click(Sender: TObject);
var eee:string;a:integer;
begin
for a:=1 to 20001 do
 begin
 eee:=e.workbooks[1].worksheets[1].cells[a,1];
 stringgrid1.Cells[1,a]:=eee;
 end;