Menu

Enregistrement fichier

- - Dernière réponse : KX
Messages postés
15940
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 février 2019
- 7 févr. 2019 à 19:35
Bonjour,
J'ai plusieurs fichiers au format libreoffice dans un dossier. Leurs noms se suivent tous. Le premier fichier est donc le 0001.ods, le deuxième est 0002.ods, le troisieme 0003.ods etc.....jusqu'au fichier 1028.ods.
J'aimerai convertir ces fichiers au format xls de Excel mais la seule solution que j'ai trouve est de les ouvrir un par un et de faire enregistrer sous et changer l'extension. Existe t'il un code pouvant ouvrir tous les fichiers et les enregister sous automatiquement au format xls avec le meme nom?
Merci!



Configuration: Windows / Chrome 71.0.3578.98
Afficher la suite 

Votre réponse

1 réponse

Messages postés
15940
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 février 2019
3525
0
Merci
Bonjour,

Si c'est à faire une fois, le plus simple serait d'utiliser les classes Desktop et Robot et faire un programme qui va ouvrir le fichier tout seul, cliquer aux bons endroits pour enregistrer au nouveau format, fermer le fichier et recommencer.

Si ça marche pour 2 ou 3 fichiers de suite, ça fonctionnera pour 1028...
KX
Messages postés
15940
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 février 2019
3525 > JulienLafitte -
Un exemple qui fonctionne chez moi, mais il faudra sûrement faire des réglages selon ta version d'Excel (les raccourcis clavier changent peut être), la taille des fichiers et la puissance de ta machine (pour augmenter ou modifier les temps d'attente entre chaque action).

Remarque : je pars du principe que C:/monDossier ne contient que des fichiers .ods à convertir au départ, et qu'à l'arrivée c'est dans ce dossier que l'on enregistre les .xlsx
Dans un premier temps je te conseilles de tester dans un dossier avec 3 ou 4 fichiers seulement pour vérifier que ça fonctionne bien avant de le lancer sur tes 1028 fichiers.

import java.awt.Desktop;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.File;

public class OdsToXlsx {
    public static void main(String[] args) throws Exception {
        Desktop desktop = Desktop.getDesktop();
        Robot robot = new Robot();

        File[] odsFiles = new File("C:/monDossier").listFiles(); // on liste tous les fichiers du dossier
        for (File odsFile : odsFiles) { // pour chaque fichier

            desktop.open(odsFile); // on ouvre le fichier avec Excel
            Thread.sleep(10_000); // on attend 15 secondes qu'Excel s'ouvre

            robot.keyPress(KeyEvent.VK_F12); // on appuie sur F12 (enregistrer sous)
            robot.keyRelease(KeyEvent.VK_F12);
            Thread.sleep(2_000);

            robot.keyPress(KeyEvent.VK_TAB); // on appuie sur Tab (passe sur le type de fichier)
            robot.keyRelease(KeyEvent.VK_TAB);
            Thread.sleep(1_000);

            robot.keyPress(KeyEvent.VK_DOWN); // on appuie sur Flèche du bas (ouvre la liste des types de fichier)
            robot.keyRelease(KeyEvent.VK_DOWN);
            Thread.sleep(1_000);

            robot.keyPress(KeyEvent.VK_PAGE_UP); // on appuie sur Page Up (choisit le 1er type de fichier, XLSX)
            robot.keyRelease(KeyEvent.VK_PAGE_UP);
            Thread.sleep(1_000);
            robot.keyPress(KeyEvent.VK_ENTER); // on appuie sur Entrée (sélection du type de fichier)
            robot.keyRelease(KeyEvent.VK_ENTER);
            Thread.sleep(1_000);

            robot.keyPress(KeyEvent.VK_ENTER); // on appuie sur Entrée (enregistrer sous)
            robot.keyRelease(KeyEvent.VK_ENTER);
            Thread.sleep(10_000); // on attend 15 secondes que le fichier s'enregistre

            robot.keyPress(KeyEvent.VK_CONTROL); // on appuie sur Ctrl+W (ferme le fichier)
            robot.keyPress(KeyEvent.VK_W);
            robot.keyRelease(KeyEvent.VK_W);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            Thread.sleep(1_000);
        }
    }
}
Merci KX mais du coup ou doit on mettre ce code? Dans le code du premier fichier du dossier?
KX
Messages postés
15940
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 février 2019
3525 > JulienLafitte -
Tu a posé ta question dans le forum Java, je te donne donc la réponse en Java... mais les macro Excel (en BASIC), ça n'a absolument rien à voir du tout...

Pour faire au plus rapide (même si ce n'est pas le plus propre), tu peux télécharger Java ici :
https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
Dans la liste tu prends le dernier lien : jdk-11.0.2_windows-x64_bin.zip
Puis tu décompresses le zip où tu veux, par exemple dans C:\jdk-11.0.2

Le code que je t'ai donné tu l'enregistres avec le bloc notes Windows dans un fichier OdsToXlsx.java (en respectant les majuscules et minuscules dans le nom) que tu mets dans C:\jdk-11.0.2\bin
Éventuellement, il faut modifier le code pour chercher le bon dossier où sont enregistrés quelques fichiers .ods

Puis en ligne de commandes (Menu Démarrer > Invites de commandes) tu vas taper ces commandes :
cd C:\jdk-11.0.2\bin
javac OdsToXlsx.java
java OdsToXlsx
Je l'ai insérer dans la macro de mon 1er fichier LibreOffice et j'ai une première erreur :
Erreur de syntaxe BASIC.
Attendu : ,.
Cette erreur apparaît au niveau de "desktop" car c'est ce mot qui est surligné.
> JulienLafitte -
Dans la macro, si je comprends bien il faut ouvrir les fichiers avec Excel mais j'ai un message d'erreur qui apparait si je le fais manuellement qui me dit que l’extension et le format du fichier ne correspondent pas (extension : xls et format : libreoffice)
Commenter la réponse de KX