FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez


SommaireMS OfficeExcelGestion de l'applicationRecours aux fonctionnalités (8)
précédent sommaire suivant
 

Cela se fait en 2 étapes : on récupère d'abord un Variant correspondant aux fonctions intégrées, puis on appelle une fonction particulière.
Nous partons bien entendu d'un Variant représentant notre instance d'Excel.

Code c++ : Sélectionner tout
1
2
3
Variant vSheetFunction; 
vSheetFunction = vMSExcel.OlePropertyGet("WorksheetFunction"); 
int res = vSheetFunction.OleFunction("Max", 3, 4);

Mis à jour le 27 octobre 2004 Ricky81

Cela n'est pas possible en pilotage OLE Excel (impossible de récupérer l'ensemble sélectionné car l'appel se fait par une 'OleProcedure' qui par définition ne renvoie pas de résultat). Nous sommes obligés de passer par le composant TExcelApplication :

Code c++ : Sélectionner tout
1
2
3
4
5
ExcelApplication1->Connect(); 
Variant file; 
Variant title = StringToOleStr("Titre"); // titre à donner à la boite de dialogue 
Variant multiselect = true; // selection multiple autorisée 
file = ExcelApplication1->GetOpenFilename(EmptyParam, EmptyParam, title, EmptyParam, multiselect, 0);
Le résultat est un Variant, mais il est nécessaire de faire la distinction pour le mode de sélection multiple. En effet, dans ce cas, c'est un Variant de type tableau qui est renvoyé (même si un seul fichier est finalement sélectionné), lequel doit être traité différemment. Dans le cas où c'est le bouton Annuler qui a été cliqué, un Variant simple ayant pour valeur "False" est renvoyé.

Voici un exemple de code qui permet de traiter les 2 modes :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
if(file.IsArray()) 
{ 
  for(int i=1 ; i<=file.ArrayHighBound(1) ; i++) 
  { 
    ShowMessage(file.GetElement(i)); 
  } 
} 
else 
{ 
  ShowMessage(file); 
}
Attention : Comme le composant TOpenDialog, cette boite de dialogue n'effectue aucune opération d'ouverture. Elle permet juste de sélectionner un ou plusieurs fichiers.

Mis à jour le 27 octobre 2004 bidou Ricky81

Cela n'est pas possible en pilotage OLE Excel (impossible de récupérer l'ensemble sélectionné car l'appel se fait par une 'OleProcedure' qui par définition ne renvoie pas de résultat). Nous sommes obligés de passer par le composant TExcelApplication :

Code c++ : Sélectionner tout
1
2
3
4
5
ExcelApplication1->Connect(); 
Variant file; 
Variant initFile = StringToOleStr("E:\\Ricky\\classeur.xls"); // fichier sélectionné au départ 
Variant title = StringToOleStr("Titre"); // titre de la boite de dialogue 
file = ExcelApplication1->GetSaveAsFilename(initFile, EmptyParam, EmptyParam, title, EmptyParam, 0);
Le résultat est un Variant valant en particulier False dans le cas d'un recours au bouton Annuler.

Comme le composant TSaveDialog, cette boite de dialogue n'effectue aucune opération de sauvegarde. Elle permet juste de sélectionner un nom de fichier.

Mis à jour le 27 octobre 2004 bidou Ricky81

Cela n'est pas possible en pilotage OLE Excel (impossible de récupérer l'ensemble sélectionné car l'appel se fait par une 'OleProcedure' qui par définition ne renvoie pas de résultat). Nous sommes obligés de passer par le composant TExcelApplication :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
ExcelApplication1->Connect(); 
Variant prompt = StringToOleStr("Texte"); // texte de la boite de saisie 
Variant title = StringToOleStr("Titre"); // titre de la boite de saisie 
Variant def = StringToOleStr("def"); // valeur par défaut 
// positionnement 
Variant left = 50; 
Variant top = 100; 
Variant answer; 
answer = ExcelApplication1->InputBox(prompt, title, def, left, top, EmptyParam, EmptyParam, EmptyParam, 0);

Mis à jour le 27 octobre 2004 bidou Ricky81

Il est possible de faire ceci pour l'ensemble de l'application, un classeur, une feuille, ou même un groupe de cellules.
Voyons un exemple pour l'application représentée par le VariantvMSExcel :

Code c++ : Sélectionner tout
vMSExcel.OleProcedure("Calculate");

Mis à jour le 27 octobre 2004 Ricky81

Nous allons travailler à partir d'un Variant représentant l'instance d'Excel.

Code c++ : Sélectionner tout
1
2
int res = vMSExcel.OleFunction("Evaluate", vOperation);  
// vOperation = "(3+4)*2" ou "=(3+4)*2" par exemple

Mis à jour le 27 octobre 2004 Ricky81

Nous devons travailler avec le classeur ou la feuille que nous souhaitons afficher.
Prenons l'exemple du classeur, défini par le VariantvWorkbook :

Code c++ : Sélectionner tout
vWorkbook.OleProcedure("Activate");

Mis à jour le 27 octobre 2004 Ricky81

Nous allons travailler sur une instance d'Excel (VariantvMSExcel).

Code c++ : Sélectionner tout
vMSExcel.OlePropertySet("WindowState", vValue);
La valeur vValue est à choisir parmi les constantes suivantes appartenant à la classe XlWindowState

Code c++ : Sélectionner tout
1
2
3
xlMaximized = -4137 
xlMinimized = -4140 
xlNormal = -4143

Mis à jour le 27 octobre 2004 Ricky81

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2020 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.