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 des classeurs (14)
précédent sommaire suivant
 

A partir d'un Variant représentant l'instance d'Excel, nous allons définir la propriété SheetsInNewWorkbook.

Code c++ : Sélectionner tout
vMSExcel.OlePropertySet("SheetsInNewWorkbook", nbSheets);

Mis à jour le 27 octobre 2004 Ricky81

A partir d'un Variant représentant l'instance d'Excel, nous allons récupérer l'ensemble des classeurs.

Code c++ : Sélectionner tout
1
2
Variant vXLWorkbooks; 
vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
Il est nécessaire de passer par cet objet même s'il n'y a pas de classeurs, par exemple pour ouvrir un classeur.

Mis à jour le 27 octobre 2004 Ricky81

Nous allons ouvrir un classeur existant.

Code c++ : Sélectionner tout
1
2
3
4
Variant vWorkbook; 
// vXLWorkbooks représente l'ensemble des classeurs 
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir 
vXLWorkbook = vXLWorkbooks.OleFunction("Open",vFileName); // on récupère un Variant correspondant au classeur ajouté

Mis à jour le 27 octobre 2004 Ricky81

Nous allons ouvrir un classeur existant.

Code c++ : Sélectionner tout
1
2
3
4
5
Variant vWorkbook, vReadOnly; 
// vXLWorkbooks représente l'ensemble des classeurs 
vReadOnly = true; 
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir 
vWorkbook = vWorkbooks.OleFunction("Open", vFileName, Unassigned, vReadOnly);

Mis à jour le 27 octobre 2004 Ricky81

Nous allons ouvrir un classeur existant en spécifiant le séparateur recherché.

Code c++ : Sélectionner tout
1
2
3
4
5
Variant vWorkbook; 
// vXLWorkbooks représente l'ensemble des classeurs 
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir 
vWorkbook = vWorkbooks.OleFunction("Open", vFileName, Unassigned, Unassigned, vSeparator); 
// vSeparator = valeur du séparateur
Les valeurs possibles pour vSeparator vont de 1 à 5 :

  • 1 : tabulation
  • 2 : point virgule
  • 3 : espace
  • 4 : point virgule
  • 5 : aucun séparateur

Mis à jour le 27 octobre 2004 Ricky81

Nous allons ouvrir un classeur existant protégé par mot de passe.

Code c++ : Sélectionner tout
1
2
3
4
5
Variant vWorkbook; 
// vXLWorkbooks représente l'ensemble des classeurs 
vWorkbook = vWorkbooks.OleFunction("Open", vFileName, Unassigned, Unassigned, Unassigned, vPwd); 
// vFileName est un Variant sous la forme chaîne de caractères correspondant au fichier à ouvrir 
// vPwd = mot de passe

Mis à jour le 27 octobre 2004 Ricky81

Nous allons ajouter un nouveau classeur à notre ensemble de classeurs.

Code c++ : Sélectionner tout
1
2
3
Variant vXLWorkbook; 
// vXLWorkbooks représente l'ensemble des classeurs 
vXLWorkbook = vXLWorkbooks.OleFunction("Add"); // on récupère un Variant correspondant au classeur ajouté
Il est à noter que même si vous n'avez pas encore de classeur ouvert, vous devez nécessairement passer par l'objet vXLWorkbook.

Mis à jour le 27 octobre 2004 Ricky81

L'objet cible est un Variant (vXLWorkbook) correspondant au classeur à sauver.

Code c++ : Sélectionner tout
vXLWorkbook.OleProcedure("Save");

Mis à jour le 27 octobre 2004 Ricky81

L'objet cible est un Variant (vXLWorkbook) correspondant au classeur à sauver.

Code c++ : Sélectionner tout
1
2
// vFileName est un Variant correspondant au nom du classeur 
vXLWorkbook.OleProcedure("Saveas", vFileName);

FileFormat peut prendre différentes valeurs suivant le format de sauvegarde désiré, ce qui
permet de charger un fichier sous un format et de le sauvegarder sous un autre format

Code c++ : Sélectionner tout
1
2
3
4
FileFormat = 6; // fichier CSV (extension .csv) 
FileFormat = -4158; //fichier Texte et separateur tabulation (extension .txt) 
FileFormat = 36; //fichier Texte et separateur espace (extension .prn) 
FileFormat = -4143; // valeur de xlNormal "sauvegarde sous format classeur excel"

Description de la fonction complète
tous les paramètres de la sauvegarde sont décrits

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
Variants FileFormat, Mot_passe, Password, WriteResPassword, ReadOnlyRecommended; 
Variants vFileName, CreateBackup, Nom_Du_Fichier; 
// utiliser Unassigned si le paramètre n'est pas utilisé 
Mot_passe = Unassigned; //"Mon_Mot_De_Passe" pour la protection du fichier 
Password = Mot_passe; // mot de passe pour protéger le fichier 
WriteResPassword = Mot_passe; // confirmation du mot de passe 
ReadOnlyRecommended = false; // fichier en lecture seule (False True Unassigned) 
// création d'une copie si le fichier existe déjà 
CreateBackup = false; // création d'une copie (False True Unassigned)

Nom_Du_Fichier = le nom du fichier avec extension .csv ou .txt ou.prn ou .xls

Code c++ : Sélectionner tout
1
2
3
// sauvegarde du fichier sous le format desire  
vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Nom_Du_Fichier"; 
vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup);

Mis à jour le 27 octobre 2004 blondelle Ricky81

La version suivante ferme le classeur avec la possibilité d'avoir une confirmation par l'utilisateur en cas de modifications non enregistrées.

Code c++ : Sélectionner tout
vXLWorkbook.OleFunction("Close");
Voici une seconde version qui permet de préciser si les modifications non enregistrées doivent être intégrées ou non.

Code c++ : Sélectionner tout
vXLWorkbook.OleFunction("Close", vSaveChanges); // vSaveChanges est un booléen (ou un Variant contenant true ou false)
Cette dernière version permet l'enregistrement dans un nouveau fichier (les modifications ne sont pas répercutées dans le fichier en cours). Le nouveau fichier est créé (ou écrasé) uniquement si le fichier en cours a été modifié depuis la dernière sauvegarde.

Code c++ : Sélectionner tout
vXLWorkbook.OleFunction("Close", true, vFileName);

Mis à jour le 27 octobre 2004 Ricky81

Si le classeur n'est pas encore ouvert, il est plus aisé de récupérer cet objet lors de l'ouverture du classeur ou de l'ajout d'un nouveau classeur (cf. autres Q/R).
Sinon, il est possible de récupérer un objet sur un classeur à partir de l'objet gérant l'ensemble des classeurs.

Code c++ : Sélectionner tout
1
2
vXLWorkbook = vXLWorkbooks.OlePropertyGet("Item", vIndex);  
// vIndex correspond à la "position" du classeur au niveau de l'application (indice commençant à 1)
Malheureusement il n'est possible que de passer un entier en paramètre. Vous pourrez par exemple tester la propriété Name des classeurs pour trouver le classeur recherché. Voici un exemple :

Code c++ : Sélectionner tout
1
2
3
4
if (vXLWorkbooks.OlePropertyGet("Item", 1).OlePropertyGet("Name") == "monFichier.xls" ) 
{ 
   ... 
}

Mis à jour le 27 octobre 2004 Ricky81

Il suffit simplement d'interroger la propriété Count sur l'objet correspondant à l'ensemble des classeurs.

Code c++ : Sélectionner tout
1
2
// vXLWorkbooks est de type Variant 
int nb = vXLWorkbooks.OlePropertyGet("Count");

Mis à jour le 27 octobre 2004 Ricky81

La protection d'un classeur agit sur la structure et sur les feuilles (supprimer, renommer, déplacer les feuilles) de façon générale (le contenu n'étant pas protégé).
Dans la suite, le Variant vWorkbook correspond à un classeur.

Code c++ : Sélectionner tout
vWorkbook.OleProcedure("Protect", "motdepasse", true, true);
Le premier booléen indique que la protection doit être activée pour la structure du classeur, alors que le second concerne les feuilles.

Pour supprimer la protection :

Code c++ : Sélectionner tout
vWorkbook.OleProcedure("UnProtect", "motdepasse");

Mis à jour le 27 octobre 2004 Ricky81

L'objet cible est un Variant (vXLWorkbook) correspondant au classeur dont on souhaite modifier le paramétrage.

Code c++ : Sélectionner tout
vXLWorkbook.OlePropertySet("Date1904", true);

Mis à jour le 27 octobre 2004 Superstivix

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.