Lecture cellules Excel [Résolu]

Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
- - Dernière réponse : YB28
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
- 8 juin 2012 à 16:40
Bonjour,
Je souhaite effectuer un programme sous delphi7 permettant de récupérer des données de plusieurs cellules d'un tableur excel et de les ajouter dans un mémo. Cependant j'obtien un message d'erreur EVariantInvalidOpError lorsque j'effectue ce code:

procedure TForm1.bt_executerClick(Sender: TObject);
var i,j     : integer;
begin
{ouverture d'Excel}
  ExcelApplication1.Visible[0]:=true; // pour rendre Excel visible

{Ouverture du fichier}
ExcelApplication1.Workbooks.Open(Edit1.Text,EmptyParam, True, EmptyParam, EmptyParam, EmptyParam,
                       EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                       EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0);

{Lire la valeur d'une cellule}
  for i:=strtoint(Edit5.text) to strtoint(Edit6.text) do
  begin
    for j:=1 to 25 do
    begin
      Memo1.Text:=Memo1.Text+ExcelApplication1.Cells.Item[i,j];// probleme ici sans doute..
    end;
  end;
end;

Je ne comprend pas ...
Merci ;)
YB
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
3
Merci
salut!!
normalement le code sera comme suit:
var i,j     : integer;
 ExcelApplication1:variant;
 workbooks:variant;
begin
{ouverture d'Excel}
 // ExcelApplication1.Visible[0]:=true; // pour rendre Excel visible

{Ouverture du fichier}

 ExcelApplication1:= CreateOleObject('Excel.Application');
 //ExcelApplication1.visible:=true;
 ExcelApplication1.Workbooks.Open(edit1.Text);

{Lire la valeur d'une cellule}
  for i:=strtoint(Edit5.text) to strtoint(Edit6.text) do
  begin
    for j:=1 to 25 do
    begin
    if ExcelApplication1.Cells[i,j].Formula <> ''then
//pour eleminer les cellules vides
      Memo1.Text:=Memo1.Text+'-'+ExcelApplication1.Cells[i,j].Formula ;// probleme ici sans doute..

    end;
 // end;
      end;
end;

@+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_walidlam
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
0
Merci
J'ai testé ca aussi :
procedure TForm1.bt_executerClick(Sender: TObject);
var i,j     : integer;
Cellule:ansistring;
begin
{ouverture d'Excel}
  OleApplication := CreateOleObject('Excel.Application');// création du lien OLE pour la classe référencé par Excel dans la base de registre "Excel.Application"
  OleApplication.visible:=True;

{Ouverture du fichier}
OleWorkBook:=OleApplication.Workbooks.open(Edit1.Text);

{Lire la valeur d'une cellule}
  for i:=strtoint(Edit5.text) to strtoint(Edit6.text) do
  begin
    for j:=0 to 4 do
    begin
       Cellule:=char(aColonne[j])+inttostr(i);
       Memo1.Text:=Memo1.Text+OleApplication.Range[Cellule].value;
    end;
  end;
end;


Cependant ne fonctionne pas non plus sauf si je retire le "for j:=0 to 4"
Commenter la réponse de YB28
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Bonjour,

il faut aussi déclarer la feuille de travail, comme ceci :

MaFeuille :_Worksheet;
MaFeuille:=MonClasseur.Worksheets['NomDeMaFeuille'] as _worksheet;

// et on lit la cellule choisie :
ShowMessage(MaFeuille.Cells.Item[2,1].Value);



cantador
Commenter la réponse de cs_cantador
Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
0
Merci
Salut,

moi je ferais comme ça :

uses ComObj;

var
  ExcelApplication1: OleVariant;

procedure TForm1.bt_executerClick(Sender: TObject);
var
  i,j: Integer;
  Value: Variant;  // pas obligé, c'était pour le test
  MyWorkbook: OleVariant;
  MyWorksheet: OleVariant;
begin
  {ouverture d'Excel}
  ExcelApplication1 := CreateOleObject('Excel.Application');
  ExcelApplication1.Visible := True; // pour rendre Excel visible

  {Ouverture du fichier}
  MyWorkbook := ExcelApplication1.Workbooks.Open(Edit1.Text);

  MyWorksheet := MyWorkbook.Worksheets[1];
  {Lire la valeur d'une cellule}
  for i := StrToInt(Edit5.Text) to StrToInt(Edit6.Text) do
  begin
    for j := 1 to 25 do
    begin
      Value := MyWorksheet.Cells[i, j].Value;
      Memo1.Lines.Add(string(Value));
    end;
  end;
  ExcelApplication1.Quit;
  ExcelApplication1 := Unassigned;
end;


Ce code fonctionne, je l'ai testé.
Bien sûr Excel peut être assigné et libéré ailleurs.
Je passe par une variable de type Variant, ce n'est pas indispensable, c'était juste pour tester viteuf avec une feuille excel remplie de valeurs pas forcément compatibles string.
Commenter la réponse de korgis
Messages postés
423
Date d'inscription
samedi 17 mai 2003
Dernière intervention
4 août 2018
0
Merci
Bien sûr, la ligne :

MyWorksheet := MyWorkbook.Worksheets[1];


peut être remplacée par :

MyWorksheet := MyWorkbook.Worksheets[NomDeMaFeuille];
Commenter la réponse de korgis
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
0
Merci
Merci de ta réponse cantador. Mais
Memo1.Text:=Memo1.Text+MaFeuille.Cells.Item[2,1].Value;
ne fonctionne pas .. Je n'arrive pas à afficher de texte dans le memo ainsi. et lorsque je fait
ShowMessage(MaFeuille.Cells.Item[2,1].Value); 
rien ne s'affiche non plus...

YB
Commenter la réponse de YB28
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Dernière intervention
29 juillet 2012
0
Merci
Merci beaucoup à tous ;)
Ca fonctionne maintenant!! ;)
Commenter la réponse de YB28

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.