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

Java Discussion :

Ouvrir un fichier excel dans Excel en cliquant sur un bouton


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut Ouvrir un fichier excel dans Excel en cliquant sur un bouton
    Bonjour,

    Pour éviter toute confusion sur cette question ambigüe, je ne veux pas lire un fichier excel depuis java. Ce que j'aimerais faire c'est qu'en cliquant sur un bouton, le programme Excel se lance et ouvre un fichier excel.

    On peut apparemment s'en sortir avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("ma commande");
    Mais le soucis c'est que je voudrais que cela puisse marcher sur n'importe quel ordinateur et donc ne pas être tributaire de l'endroi où est installé Excel. Y a-t-il une commande qui permettrais de faire ça ou un moyen plus simple de réaliser la fonctionnalité ?

    Merci d'avance

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Je pense que non. Ce n'est pas possible d'avoir quelque chose de généralisé. La localisation d'Excel c'est bien en dehors du cadre de Java. Du coup, il n'y a rien qui en Java puisse connaître son emplacement.

    La seule solution serait de répertorier les répertoires d'installation habituels ou peut être d'enregistrer au sein de chaque poste utilisateur, une variable d'environnement pointant sur le dossier d'Excel.

    Mais peut être que quelqu'un d'autre aura une idée de génie à te proposer.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    A partir de Java 6 tu peux utiliser la classe Desktop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if (Desktop.isDesktopSupported()) {
    		Desktop desktop = Desktop.getDesktop();
    		if (desktop.isSupported(Action.OPEN)) {
    			desktop.open(file);
    		}
    	}
    Toutefois le support peut varier selon le système d'exploitation, et il te faudra peut-être mettre en place des alternatives.


    Sous Mac tu as la commande "open".
    Sous Linux tu as "xdg-open" ou "gnome-open". Mais il me semble que le premier est la version standardisé.
    Sous Windows tu as "start", mais c'est un builtin que tu ne peux pas appeler directement (il faut passer par command.com ou cmd.exe selon le cas).


    a++

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    Super ! Ca marche impec.
    Par contre du cout dans l'installation j'obligerais l'utilisateur à mettre à jour sa plate-forme Java
    Merci à toi, ce problème n'avait pas l'air simple

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Attention car Desktop n'est pas forcément supporté par tous les systèmes...


    Sinon pour une compatibilité avec des versions de Java plus anciennes, tu pourrais tenter quelques chose comme cela :
    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
    	public static void open(File file) throws IOException, InterruptedException {
    		final String[] cmdArray;
    		final String filePath = file.getAbsolutePath();
     
    		String osName = System.getProperty("os.name");
    		if (osName.indexOf("Windows") >= 0) {
    			// Sous Windows la commande diffère selon la version :
    			if (osName.indexOf("Windows 9")>=0 || osName.indexOf("Windows Me")>=0) {
    				// Sous les Windows 9x ou Me, on doit utiliser "command.com" :
    				cmdArray = new String[] {"command.com", "/C", "start", filePath};
    			} else {
    				// Sous Windows NT ou les Windows depuis 2000, on utilise cmd.exe :
    				cmdArray = new String[] {"cmd.exe", "/C", "start", filePath};
    			}
    		} else if (osName.indexOf("Mac OS") >= 0) {
    			// Sous Max OS on utilise directement 'open'
    			cmdArray = new String[] {"open", filePath};
    		} else if (osName.indexOf("Linux") >= 0) {
    			// Sous linux on utilise directement 'xdg-open'
    			cmdArray = new String[] {"xdg-open", filePath};
    		} else {
    			throw new IOException("Unsupported Operating System : " + osName);
    		}
    		// On lance le process correspondant :
    		Process process = Runtime.getRuntime().exec(cmdArray);
    		// Et on ferme les flux d'E/S standard
    		// (sinon cela peut provoquer des blocages)
    		process.getInputStream().close();
    		process.getOutputStream().close();
    		process.getErrorStream().close();
    	}

    a++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    C'est pas grave si j'ai pas la réponse car la méthode desktop marche mais quand j'utilise ta fonction open, j'ai l'invite de commande qui se met avec pour titre mon fichier xls et Excel ne s'ouvre pas

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je viens de retester sans problème. Dans le doute j'ai trifouillé le nom du fichier et je rencontre le même problème si le chemin contient des espaces :/


    Ce semble être un problème spécifique à Windows puisque j'obtiens le même résultat en ligne de commande :/

    Mais apparemment on peut se passer de "start" et passer directement le nom du fichier à cmd.


    Le code corrigé :
    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
    	public static void open(File file) throws IOException, InterruptedException {
    		final String[] cmdArray;
    		final String filePath = file.getAbsolutePath();
     
    		String osName = System.getProperty("os.name");
    		if (osName.indexOf("Windows") >= 0) {
    			// Sous Windows la commande diffère selon la version :
    			if (osName.indexOf("Windows 9")>=0 || osName.indexOf("Windows Me")>=0) {
    				// Sous les Windows 9x ou Me, on doit utiliser "command.com" :
    				cmdArray = new String[] {"command.com", "/C", filePath};
    			} else {
    				// Sous Windows NT ou les Windows depuis 2000, on utilise cmd.exe :
    				cmdArray = new String[] {"cmd.exe", "/C", filePath};
    			}
    		} else if (osName.indexOf("Mac OS") >= 0) {
    			// Sous Max OS on utilise directement 'open'
    			cmdArray = new String[] {"open", filePath};
    		} else if (osName.indexOf("Linux") >= 0) {
    			// Sous linux on utilise directement 'xdg-open'
    			cmdArray = new String[] {"xdg-open", filePath};
    		} else {
    			throw new IOException("Unsupported Operating System : " + osName);
    		}
    		// On lance le process correspondant :
    		Process process = Runtime.getRuntime().exec(cmdArray);
    		// Et on ferme les flux d'E/S standard
    		// (sinon cela peut provoquer des blocages)
    		process.getInputStream().close();
    		process.getOutputStream().close();
    		process.getErrorStream().close();
    	}
    a++

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    Super, ça fonctionne au poil
    Je met pour info la super fonction que j'utilise :

    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
    			//ouverture d'excel
    			if (Desktop.isDesktopSupported()) {
    				Desktop desktop = Desktop.getDesktop();
    				if (desktop.isSupported(Action.OPEN)) {
    					try {
    						desktop.open(new File("Tableau croisé dynamique.xls"));
    					} catch (IOException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}
    			}
    			else
    			{
    				String[] cmdArray = null;
    				final String filePath = new File("Tableau croisé dynamique.xls").getAbsolutePath();
     
    				String osName = System.getProperty("os.name");
    				if (osName.indexOf("Windows") >= 0) {
    					// Sous Windows la commande diffère selon la version :
    					if (osName.indexOf("Windows 9")>=0 || osName.indexOf("Windows Me")>=0) {
    						// Sous les Windows 9x ou Me, on doit utiliser "command.com" :
    						cmdArray = new String[] {"command.com", "/C", filePath};
    					} else {
    						// Sous Windows NT ou les Windows depuis 2000, on utilise cmd.exe :
    						cmdArray = new String[] {"cmd.exe", "/C", filePath};
    					}
    				} else if (osName.indexOf("Mac OS") >= 0) {
    					// Sous Max OS on utilise directement 'open'
    					cmdArray = new String[] {"open", filePath};
    				} else if (osName.indexOf("Linux") >= 0) {
    					// Sous linux on utilise directement 'xdg-open'
    					cmdArray = new String[] {"xdg-open", filePath};
    				} else {
    					try {
    						throw new IOException("Unsupported Operating System : " + osName);
    					} catch (IOException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}
    				// On lance le process correspondant :
    				try {
    					Process process = Runtime.getRuntime().exec(cmdArray);
    					// Et on ferme les flux d'E/S standard
    					// (sinon cela peut provoquer des blocages)
    					process.getInputStream().close();
    					process.getOutputStream().close();
    					process.getErrorStream().close();
    				} catch (IOException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    			}
    Merci beaucoup pour ton aide

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Heu... Tes try/catch sont affreux ! Il est préférable de les laisser remonter pour les traiter à plus haut niveau...


    De plus ton if/else est erroné car si l'action desktop.isSupported(Action.OPEN) renvoi false tu ne fera rien du tout.


    a++

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

Discussions similaires

  1. Ouvrir un fichier csv dans excel
    Par judavid dans le forum VBScript
    Réponses: 5
    Dernier message: 17/03/2009, 19h01
  2. Ouvrir un fichier csv dans excel via access
    Par NELAIN dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/02/2009, 15h15
  3. Réponses: 12
    Dernier message: 15/11/2006, 09h55
  4. [VBA-Excel] Ouvrir un lot de fichier txt dans Excel
    Par Trollakuir dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/06/2006, 10h02
  5. Réponses: 28
    Dernier message: 22/05/2006, 16h25

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