OVH Cloud OVH Cloud

[C++] Comment ajouter un worksheet sous excel

7 réponses
Avatar
Olivier NOËL
avec Visual Studio, j'utilise les classes générées à partir de la librairie
Excel9.olb.
en particulier la class CWorksheets, qui m'offre l'interface Add, pour
ajouter une feuille dans mon fichier Excel
Est ce que quelqu'un aurais le mode d'emploi de cette interface, je n'arrive
pas à passer correctement mes paramètres pour créer une feuille comme étant
la derniere feuille de mon fichier.

7 réponses

Avatar
Dominique Vaufreydaz
Bonjour,

Olivier NOËL wrote:
avec Visual Studio, j'utilise les classes générées à partir de la
librairie Excel9.olb.
en particulier la class CWorksheets, qui m'offre l'interface Add, pour
ajouter une feuille dans mon fichier Excel
Est ce que quelqu'un aurais le mode d'emploi de cette interface, je
n'arrive pas à passer correctement mes paramètres pour créer une
feuille comme étant la derniere feuille de mon fichier.



J'ai pas regardé en détails, mais j'ai trouvé un pompage d'une KB microsoft
ici http://www.kbalertz.com/kb_Q308407.aspx

Tu devrais pouvoir partir de ca.

Doms.
Avatar
Olivier NOËL
Merci,
Il s'agit effectivement d'une copie d'un KB microsoft que j'avais deja
parcouru.
malheureusement pour moi, il n'est pas expliqué comment faire pour ajouter
un supprimer un sheet.
j'ai le code suivant :

CWorksheets sheets;
CWorksheet sheet;
sheet.attachDispatch(sheets.add(BEFORE, AFTER, COUNT, TYPE));

quelque soit les parametres que je passe à la méthode add pour BEFORE,
AFTER, COUNT et TYPE, je recupere une exception.
est ce que c'est le TYPE qui est bien particulier, et que je ne trouve pas,
est ce que BEFORE, AFTER, COUNT ne sont pas des entiers passés en VARIANT
???

je ne trouve pas, je desespere (heu .. non, pas à ce point la, c'est pour le
boulot quand meme ;-))

D'avance merci



"Dominique Vaufreydaz" a écrit dans le
message de news:d6c2jq$5du$
Bonjour,

Olivier NOËL wrote:
> avec Visual Studio, j'utilise les classes générées à partir de la
> librairie Excel9.olb.
> en particulier la class CWorksheets, qui m'offre l'interface Add, pour
> ajouter une feuille dans mon fichier Excel
> Est ce que quelqu'un aurais le mode d'emploi de cette interface, je
> n'arrive pas à passer correctement mes paramètres pour créer une
> feuille comme étant la derniere feuille de mon fichier.

J'ai pas regardé en détails, mais j'ai trouvé un pompage d'une KB


microsoft
ici http://www.kbalertz.com/kb_Q308407.aspx

Tu devrais pouvoir partir de ca.

Doms.


Avatar
Dominique Vaufreydaz
Bonjour,

CWorksheets sheets;
CWorksheet sheet;
sheet.attachDispatch(sheets.add(BEFORE, AFTER, COUNT, TYPE));
quelque soit les parametres que je passe à la méthode add pour BEFORE,
AFTER, COUNT et TYPE, je recupere une exception.
est ce que c'est le TYPE qui est bien particulier, et que je ne
trouve pas, est ce que BEFORE, AFTER, COUNT ne sont pas des entiers
passés en VARIANT ???

je ne trouve pas, je desespere (heu .. non, pas à ce point la, c'est
pour le boulot quand meme ;-))



J'ai pas le temps d'essayer la, mais sheet, c'est 1 feuille ! Y'a pas un containner
de feuille sou tu pourrais ajouter des sheets ! Ca me paraitait plus proche de
la terminologie Excellienne...

Doms.
Avatar
Olivier NOËL
ben si, CWorksheets (avec un S) qui est un container de feuille, qui possede
une méthode Add pour ajouter une feuille,
qui retourne un LPDISPATCH, auquel tu attache ta feuille,
le problème étant que je ne trouve aucune documentation sur les parametres
de la méthode Add
et que quelque soit les parametres que j'ai pu fournir à cette méthode, une
exception est soulevée...


"Dominique Vaufreydaz" a écrit dans le
message de news:d6h6mc$cpk$
Bonjour,

> CWorksheets sheets;
> CWorksheet sheet;
> sheet.attachDispatch(sheets.add(BEFORE, AFTER, COUNT, TYPE));
> quelque soit les parametres que je passe à la méthode add pour BEFORE,
> AFTER, COUNT et TYPE, je recupere une exception.
> est ce que c'est le TYPE qui est bien particulier, et que je ne
> trouve pas, est ce que BEFORE, AFTER, COUNT ne sont pas des entiers
> passés en VARIANT ???
>
> je ne trouve pas, je desespere (heu .. non, pas à ce point la, c'est
> pour le boulot quand meme ;-))

J'ai pas le temps d'essayer la, mais sheet, c'est 1 feuille ! Y'a pas


un containner
de feuille sou tu pourrais ajouter des sheets ! Ca me paraitait plus


proche de
la terminologie Excellienne...

Doms.


Avatar
Christian
Bonjour

Tu trouveras toutes les informations voulues dans la doc pour Visual Basic.
Certaines règles simples te permettront d'adapter la doc en C++ (LDISPATCH
qui est le pendant interne de la "dot notation" du VB, la notion de VARIANT,
etc.)

http://msdn.microsoft.com/library/en-us/off2000/html/xlmscobjectmodelchanges2000.asp?frame=true

Choisis dans le menu de gauche ta version d'excel. Regarde "Microsoft Excel
Objects", tu cliques sur les objets puis tu arrive sur "methodes",
"properties", etc. Tu trouveras à "Add Method (Worksheets Collection)" le
paramètre type doit être "XlSheetType constants: xlWorksheet,
xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is
xlWorksheet"

Pour avoir la valeur de ces paramètres, tu peux regarder les info de types
avec OLE COM Viewer sur "Type Library" / "Microsoft Excel 9 Object Library"
:

typedef enum {

xlChart = -4109,

xlDialogSheet = -4116,

xlExcel4IntlMacroSheet = 4,

xlExcel4MacroSheet = 3,

xlWorksheet = -4167

} XlSheetType;


En VB tout cela est automatique.

Olivier NOËL wrote:
avec Visual Studio, j'utilise les classes générées à partir de la
librairie Excel9.olb.
en particulier la class CWorksheets, qui m'offre l'interface Add, pour
ajouter une feuille dans mon fichier Excel
Est ce que quelqu'un aurais le mode d'emploi de cette interface, je
n'arrive pas à passer correctement mes paramètres pour créer une
feuille comme étant la derniere feuille de mon fichier.


Avatar
Olivier NOËL
Super,
En fait, ce qu'il me manquait, c'est la valeur du 4ieme parametre, le type.
Encore merci

PS : je renonce definitivement à l'idée d'avoir de la doc en C++ ????

"Christian" a écrit dans le message de
news:428ecfb5$0$6787$
Bonjour

Tu trouveras toutes les informations voulues dans la doc pour Visual


Basic.
Certaines règles simples te permettront d'adapter la doc en C++ (LDISPATCH
qui est le pendant interne de la "dot notation" du VB, la notion de


VARIANT,
etc.)




http://msdn.microsoft.com/library/en-us/off2000/html/xlmscobjectmodelchanges2000.asp?frame=true

Choisis dans le menu de gauche ta version d'excel. Regarde "Microsoft


Excel
Objects", tu cliques sur les objets puis tu arrive sur "methodes",
"properties", etc. Tu trouveras à "Add Method (Worksheets Collection)" le
paramètre type doit être "XlSheetType constants: xlWorksheet,
xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. The default value is
xlWorksheet"

Pour avoir la valeur de ces paramètres, tu peux regarder les info de types
avec OLE COM Viewer sur "Type Library" / "Microsoft Excel 9 Object


Library"
:

typedef enum {

xlChart = -4109,

xlDialogSheet = -4116,

xlExcel4IntlMacroSheet = 4,

xlExcel4MacroSheet = 3,

xlWorksheet = -4167

} XlSheetType;


En VB tout cela est automatique.

Olivier NOËL wrote:
> avec Visual Studio, j'utilise les classes générées à partir de la
> librairie Excel9.olb.
> en particulier la class CWorksheets, qui m'offre l'interface Add, pour
> ajouter une feuille dans mon fichier Excel
> Est ce que quelqu'un aurais le mode d'emploi de cette interface, je
> n'arrive pas à passer correctement mes paramètres pour créer une
> feuille comme étant la derniere feuille de mon fichier.




Avatar
Christian
> PS : je renonce definitivement à l'idée d'avoir de la doc en C++ ????



Bonjour Olivier

Mais pas du tout ... car il t'en faudra ! La doc du VB ne que donne les
spécifications des API d'automation d'Excel (ou tout autre appli
programmable en VB).

Maintenant il te faut chercher sur http://www.microsoft.com des articles et
exemples expliquant les mécanismes de l'automation, tout se fera pour toi en
C++ à ce niveau.

Lance "automation excel sample" dans "recherche" sur le site microsoft.

Sinon, tu peux programmer directement sur les API, ou utiliser MFC qui
encapsule pas mal et simplifie, ou utiliser ATL. VC6 offre ces choix.

il y a aussi l'option du compilateur "#import" à regarder, autre
possibilité de tenier compte des "bibliothèque de types".

Bref il y a du travail :-)