YB28
Messages postés38Date d'inscriptionlundi 23 avril 2012StatutMembreDernière intervention29 juillet 2012
-
8 juin 2012 à 14:29
YB28
Messages postés38Date d'inscriptionlundi 23 avril 2012StatutMembreDernière intervention29 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;
cs_walidlam
Messages postés107Date d'inscriptionlundi 30 mai 2011StatutMembreDernière intervention29 avril 20131 8 juin 2012 à 16:04
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;
YB28
Messages postés38Date d'inscriptionlundi 23 avril 2012StatutMembreDernière intervention29 juillet 20121 8 juin 2012 à 15:30
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"
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 8 juin 2012 à 15:35
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);
korgis
Messages postés420Date d'inscriptionsamedi 17 mai 2003StatutMembreDernière intervention 6 mai 201917 8 juin 2012 à 16:03
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?