Lecture cellules Excel [Résolu]

Messages postés
39
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
- - Dernière réponse : YB28
Messages postés
39
Date d'inscription
lundi 23 avril 2012
Statut
Membre
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 

7 réponses

Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
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 200 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
Statut
Membre
Dernière intervention
29 juillet 2012
1
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
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
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
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
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
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
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
Statut
Membre
Dernière intervention
29 juillet 2012
1
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
Statut
Membre
Dernière intervention
29 juillet 2012
1
0
Merci
Merci beaucoup à tous ;)
Ca fonctionne maintenant!! ;)
Commenter la réponse de YB28