IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ODS et reporting Discussion :

ODS TAGSET & DDE


Sujet :

ODS et reporting

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut ODS TAGSET & DDE
    Bonjour,

    je souhaite créer une macro qui, à partir d'un nom de table, réalise la description (proc freq) de chacune des variables qui la compose vers un fichier excel.
    Je souhaite que chacune des descriptions soit sur un onglet qui porte le nom de la variable décrite.

    J'y arrive avec le DDE mais je dois avoir créer tout les onglets préalablement, ce qui peut être très long quand il y a beaucoup de variables.

    Pour "contourner" ce problème, j'ai préalablement codé un ODS TAGSET, qui crée le fichier avec mes onglets.
    Mais impossible de faire ouvrir le fichier excel automatiquement sans message d'erreur.
    J'imagine que le problème vient du fait que l'ODS TAGSET génère des XML plutôt que des XLS, sans réussir à résoudre mon problème.

    Voici le code jusqu'à la tentative d'ouverture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    %LET SAVE=C:\01 - PROGRAMMATION\02 - EXCEL\FBQ10;
    %LET EXCEL=TEST;
    %LET SLEEP=2;
     
    PROC CONTENTS DATA=TEMP OUT=DICO NOPRINT;RUN;
     
    	DATA DICO;
    	SET DICO;
    	/* RÉCUPÉRATION DU NOM DE CHAQUE VARIABLE DANS DES MV AINSI QUE LE NOMBRE DE VARIABLES*/
    	CALL SYMPUTX(COMPRESS("NVAR"||_N_),NAME);
    	CALL SYMPUTX("NBVAR",_N_);
    	RUN;
     
     
    	/*CREATION DU FICHIER EXCEL ET DES ONGLETS + OUVERTURE */
    	%DO I=1 %TO &NBVAR;
    		DATA TABLE&I;
    		SET DICO;
    		IF NAME="&&NVAR&I";
    		KEEP NAME;
    		RUN;
    	%END;
    			/*CRÉATION DU FICHIER XLS ET DES ONGLETS*/
    	ODS TAGSETS.EXCELXP FILE = "&SAVE\&EXCEL..XML" ; 
    	%DO I=1 %TO &NBVAR;
    		ODS TAGSETS.EXCELXP OPTIONS (SHEET_NAME = "&&NVAR&I");
    			PROC PRINT DATA=TABLE&I NOOBS;
    			VAR NAME;
    			RUN;
    	%END;
    	ODS TAGSETS.EXCELXP CLOSE;
     
    			/*OUVERTURE DU FICHIER*/
    	FILENAME TEST DDE ' EXCEL|SYSTEM ';
    	SYSTASK COMMAND "START EXCEL";
     
    	DATA _NULL_;
    	DODO=SLEEP(&SLEEP);
    	RUN;
     
    	DATA _NULL_;
    	FILE TEST;
    	PUT %UNQUOTE(%BQUOTE('[OPEN(&SAVE\&EXCEL..XLS)]'));
    	PUT %UNQUOTE(%BQUOTE('[SAVE.AS(&SAVE\&EXCEL..XLSX)]'));
    	RUN;
    Et voici le message d'erreur dans la log:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ERROR: Session DDE n'est pas prête.
    FATAL: Unrecoverable I/O error detected in the execution of the DATA step program.
           Aborted during the EXECUTION phase.

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Bonjour,

    Oui, DDE ne travaille que sur les fichiers binaires excel et tu n'as pas besoin d'utiliser cette techno ici.
    Si ton seul souci est de renommer le fichier xml en .xlsx il te suffit de le créer directement sous le nom .xlsx en sortie du tagset. Il s'agit juste d'un nom. Ce n'est pas parce que le tagset écrit du xml qu'il faut donner l'extension .xml au fichier. Tu pourrais tout aussi bien le nommer .toto.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Bonjour merci pour cette réponse.

    Si dans l'ODS TAGSET je mest le fichier en .XLSX c'est encore pire, le fichier est créer mais il est impossible à ouvrir.
    Avec un XLS ça passe mais à l'ouverture du fichier excel il y a un message d'erreur.
    Mon objectif à la suite de l'ods tagset est d'utiliser le DDE pour exporter des résultats dans chaque onglet via le DDE, sans avoir à ouvrir excel manuellement, cliquez sur "oui" car il y a un pb de compatilité et ensuite envoyer les résultats en DDE.

    J'ai essayer toute les combinaisons XML,XLS et XLSX sans succès.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Tu ne pourras pas t'en sortir avec DDE de cette manière : tu ne peux pas exporter les données avec DDE dans le fichier XML. DDE travaille sur les binaires excel. C'est à dire les véritables fichiers excel au format propriétaire excel. Par contre tu peux très bien écrire tes données avec le tagset en même temps que tu crées les onglets. Tu obtiens un fichier XML lisible en théorie par excel. Si xlsx plante, renomme le xls.
    Si tu veux travailler sur des binaires, utilise le libname EXCEL (ou le PCFILE).

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Merci bcp de je vais chercher dans ces pistes.
    J'ai utilisé l'ODS tagset dans le seul but d'automatiser la création de mes onglets , ce que le DDE n'est pas capable de faire.

    Ce qui me perturbe c'est qu'en y allant étape par étape, ça fonctionne.
    1-Je lance l'ods tagset
    2-J'ouvre manuellement le fichier excel et clique sur "Oui" au message d'erreur
    3-Je lance mes exports DDE
    4-J'obtiens mes résultats dans chaque feuille

  6. #6
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Pour avoir déjà cherché à éliminer le message à l'ouverture d'un XLS (en fait XML) produit par l'ODS TAGSETS, je pense que ce n'est pas facile/possible. En tout cas je n'ai trouvé aucune solution à ce jour.
    Faire cliquer sur OUI automatiquement au DDE, c'est là que ça coince. Il n'y a pas de commande macro Excel pour une situation qui ne s'est jamais présentée avant Excel 2007 (c'est à partir de cette version que les messages se produisent, avec Excel 2003 le fichier s'ouvre sans avertissement aucun). Or le langage macro Excel qu'utilise DDE date d'Excel 95.

    En revanche, quand tu dis "ce que le DDE n'est pas capable de faire" pour la création d'un onglet, as-tu testé les commandes macros Excel WORKBOOK.NEW et WORKBOOK.NAME ? Je n'ai pas fait de test, mais ça semble créer tout ce qu'il faut. Quant à le piloter depuis une table SAS, ce n'est qu'une question d'étape DATA.

    Bon courage.
    Olivier
    Bon courage.
    Olivier

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    merci beaucoup pour ces infos, je vais rechercher avec ces nouvelles pistes!

  8. #8
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    Il me semble qu'il faut tout simplement supprimer l'utilisation du DDE et ne faire que de l'ODS tagset ExcelXP, puisqu'il sait gérer les sorties par onglet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ods listing close; 
     
    ods tagsets.ExcelXP path='c:\temp\' file='test.xls'; 
    ods tagsets.ExcelXP options(sheet_name='la table class') ;
    proc print data=sashelp.class ;
    run ;
     
    ods tagsets.ExcelXP options(sheet_name='la table voiture') ;
    proc print data=sashelp.cars ;
    run ;
     
    ods tagsets.ExcelXP close;
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Bonjour à tous,

    merci pour votre aide!
    J'ai finalement réussi à trouver la solution grâce à la piste d'Olivier et grâce à cet article: http://http://www2.sas.com/proceedin...27/p190-27.pdf

    Je ne souhaitais pas utiliser l'ODS TAGSET car cette macro est une "variante" d'une précédente qui utilisait le DDE (mais qui sortait tous les résultats dans un seul onglet excel) et je n'avais pas envie de la refaire entièrement.

    Voilà donc la solution que j'ai trouvée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    %MACRO FB2(TABLE=,SAVE=,EXCEL=);
    	DATA TEMP;
    	SET &TABLE;
    	RUN;
     
    	PROC CONTENTS DATA=TEMP OUT=DICO NOPRINT;RUN;
     
    	/* AFIN QUE LES ONGLETS EXCEL APPARRAISSENT DANS L'ORDRE ALPHABÉTIQUE DES NOMS DES VARIABLES*/
    	DATA DICO;
    	SET DICO;
    	NAME=PROPCASE(NAME);
    	RUN;
     
    	PROC SORT DATA=DICO;BY DESCENDING NAME ;RUN;
     
    	DATA DICO;
    	SET DICO;
    	/* RÉCUPÉRATION  DU NOM  DE CHAQUE VARIABLE DANS DES MV AINSI QUE LE NOMBRE DE VARIABLES*/
    	CALL SYMPUTX(COMPRESS("NVAR"||_N_),NAME);
    	CALL SYMPUTX("NBVAR",_N_);
    	RUN;
     
     
    	/*CREATION DU FICHIER EXCEL & OUVERTURE */
    	OPTIONS NOXSYNC NOXWAIT XMIN;
    	FILENAME TEST DDE 'EXCEL|SYSTEM';
     
    	DATA _NULL_;
    	LENGTH FID RC START STOP TIME 8;
    	FID=FOPEN('TEST','S');
    	IF (FID LE 0) THEN DO;
    	RC=SYSTEM('START EXCEL');
    	START=DATETIME();
    	STOP=START+10;
    	DO WHILE (FID LE 0);
    	FID=FOPEN('TEST','S');
    	TIME=DATETIME();
    	IF (TIME GE STOP) THEN FID=1;
    	END;
    	END;
    	RC=FCLOSE(FID);
    	RUN;
     
    	/*SAUVEGARDE DU FICHIER EXCEL*/
    	DATA _NULL_;
    	FILE TEST;
    	PUT '[FILE.CLOSE(FALSE)]';
    	PUT '[NEW(1)]';
    	PUT '[ERROR(FALSE)]';
    	PUT %UNQUOTE(%BQUOTE('[SAVE.AS("&SAVE\&EXCEL")]'));
    	RUN;
     
    	/* CREATION D'ONGLETS: UN PAR VARIABLE*/
    	DATA _NULL_;
    	FILE TEST;
    	%DO I=1 %TO &NBVAR;
    		%IF &I NE &NBVAR %THEN %DO;
    			PUT %UNQUOTE(%BQUOTE('[WORKBOOK.INSERT(1)]'));
    			PUT %UNQUOTE(%BQUOTE('[WORKBOOK.NAME("FEUIL&I","&&NVAR&I")]'));
    		%END;
    		%ELSE %DO;
    			PUT %UNQUOTE(%BQUOTE('[WORKBOOK.NAME("FEUIL&I","&&NVAR&I")]'));
    		%END;
    	%END;
    	RUN;
     
    %MEND;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Données ne s'affichent pas avec ods tagsets.excelxp
    Par Najua dans le forum ODS et reporting
    Réponses: 7
    Dernier message: 01/09/2010, 12h44
  2. [Ods tagsets.excelxp]Problème print_footer dans sortie XLS
    Par Filippo dans le forum ODS et reporting
    Réponses: 0
    Dernier message: 20/04/2010, 13h52
  3. Saut de ligne dans une proc report et ODS tagset.ExcelXP
    Par l'breton du 29 dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 22/07/2009, 19h42
  4. ODSOUT / ODS Tagsets pour Excel
    Par Maggy dans le forum ODS et reporting
    Réponses: 8
    Dernier message: 09/04/2009, 19h15
  5. Export vers Excel via l'ods tagsets
    Par glotte78 dans le forum ODS et reporting
    Réponses: 6
    Dernier message: 03/12/2008, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo