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 :

Transformer des cellules Excel en image avec Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 20
    Par défaut Transformer des cellules Excel en image avec Java
    Bonjour,


    Voilà mon besoin est très simple, je souhaite pouvoir créer une image à partir de cellules d'un fichier Excel*.

    J'ai cherché si c'était possible avec le projet POI mais sans résultat.

    Je suis allé voir sur le Google anglais et j'ai trouvé la solution idéale :
    http://iandjava.blogspot.fr/2013/07/...to-images.html

    Mais la solution est payante et j'ai besoin d'une solution gratuite.


    Merci d'avance si vous pouvez m'apporter vos avis et de l'aide.


    * Ce lien détaille exactement mon besoin : http://www.c-sharpcorner.com/UploadF...ree-excel-api/

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. si tu n'as pas besoin d'une image rigoureusement exacte, tu peux facilement charger avec POIFS les cellules dans un tableau, utiliser une JTable pour l'afficher et l'imprimer en simulant l'impression de base de JTable vers une image (par le TablePrintable)
    2. Si tu as besoin d'une vue plus exacte, il n'est pas très complexe de le faire en utilisant poifs ; simplement ça demande du travail
    3. Éventuellement, il y a la solution de faire le rendu en html (http://svn.apache.org/repos/asf/poi/...ml/ToHtml.java), et d'utiliser un moyen de transformer le html en image (par exemple avec https://code.google.com/p/java-html2image/).
      Tu peux aussi partir de la classe ToHtml et de t'en inspirer pour implémenter la solution 2 avec moins de travail.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 20
    Par défaut
    Bonjour,


    Merci pour ta réponse !


    J'ai besoin d'une image rigoureusement exacte, dans un format vectoriel pour pouvoir diminuer ou augmenter sa taille.


    Je suis bien tenté par ta solution 2 même si ça représente du travail.
    Par contre, je ne sais pas du tout pas où commencer.
    Je souhaite faire un outil générique qui prend en entrée un fichier Excel (xls ou xlsx), un onglet, la première et la dernière cellule (A1 C8 par exemple).
    J'imagine que la première étape est de lire les cellules (contenu et style) mais après où dois-je les stocker ?


    Avant de répondre, j'ai essayé la solution ToHtml, mais je bloque à un NullPointerException à la ligne 245 :
    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
     
        public void printStyles() {
            ensureOut();
     
            // First, copy the base css
            BufferedReader in = null;
            try {
                in = new BufferedReader(new InputStreamReader(
                        getClass().getResourceAsStream("excelStyle.css"))); // ligne 245
                String line;
                while ((line = in.readLine()) != null) {
                    out.format("%s%n", line);
                }
            } catch (IOException e) {
                throw new IllegalStateException("Reading standard css", e);
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        //noinspection ThrowFromFinallyBlock
                        throw new IllegalStateException("Reading standard css", e);
                    }
                }
            }
    A noter qu'Eclipse m'indiquait une erreur, j'ai modifié la ligne 159 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        private void setupColorMap() {
            if (wb instanceof HSSFWorkbook) 
                helper = new HSSFHtmlHelper((HSSFWorkbook) wb); 
            else if (wb instanceof XSSFWorkbook) 
                helper = new XSSFHtmlHelper((XSSFWorkbook) wb); // ligne 159
            else
                throw new IllegalArgumentException(
                        "unknown workbook type: " + wb.getClass().getSimpleName());
        }
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    helper = new XSSFHtmlHelper((XSSFWorkbook) wb);
    Pour moi il n'y a pas d'incidence mais je préfère l'indiquer au cas où (j'utilise java 1.6).
    J'ai également ajouté la librairie xmlbeans-2.4.0.jar.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Alexandre K. Voir le message
    Bonjour,


    Merci pour ta réponse !


    J'ai besoin d'une image rigoureusement exacte, dans un format vectoriel pour pouvoir diminuer ou augmenter sa taille.
    Dans ce cas, je ferais soit du PDF(avec iText ou PDFBox par exemple), soit du SVG (Batik par exemple).
    Plutôt du PDF je pense, avec un sheet par page. En utilisant PDFBox, on peut convertir du HTML en PDF. En utilisant Apache Tika, il me semble qu'on peut convertir du excel en HTML, mais je n'ai jamais pratiqué.


    Citation Envoyé par Alexandre K. Voir le message
    Je suis bien tenté par ta solution 2 même si ça représente du travail.
    Par contre, je ne sais pas du tout pas où commencer.
    Ça va faire bateau comme réponse, mais je dirais de commencer par le commencement Etudier les tutoriels de iText ou PDFBox, ceux de Apache POI (ou Apache Tika).
    A commencer par la création de PDF (Document, oui PDFPTable par exemple pour faire une table), d'une part, et d'autre part, le parcourt de cellule, et les notions de workbook (en fonction de l'extension), sheet, row, cell... puis comment récupérer les attributs d'une cellule (type, contenu, styles (CellStyle), format, etc.).
    Ouvrir le fichier (dans un Workbook), parcourir les lignes, puis pour chaque lignes les cellules, pour créer une table (PdfPTable je pense).


    Citation Envoyé par Alexandre K. Voir le message
    Je souhaite faire un outil générique qui prend en entrée un fichier Excel (xls ou xlsx), un onglet, la première et la dernière cellule (A1 C8 par exemple).
    J'imagine que la première étape est de lire les cellules (contenu et style) mais après où dois-je les stocker ?


    Avant de répondre, j'ai essayé la solution ToHtml, mais je bloque à un NullPointerException à la ligne 245 :
    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
     
        public void printStyles() {
            ensureOut();
     
            // First, copy the base css
            BufferedReader in = null;
            try {
                in = new BufferedReader(new InputStreamReader(
                        getClass().getResourceAsStream("excelStyle.css"))); // ligne 245
                String line;
                while ((line = in.readLine()) != null) {
                    out.format("%s%n", line);
                }
            } catch (IOException e) {
                throw new IllegalStateException("Reading standard css", e);
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        //noinspection ThrowFromFinallyBlock
                        throw new IllegalStateException("Reading standard css", e);
                    }
                }
            }
    Peut-être due à l'absence de excelStyle.css, mais difficile d'en dire plus si je ne sais pas quelle est la ligne 245...

    Citation Envoyé par Alexandre K. Voir le message
    A noter qu'Eclipse m'indiquait une erreur, j'ai modifié la ligne 159 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        private void setupColorMap() {
            if (wb instanceof HSSFWorkbook) 
                helper = new HSSFHtmlHelper((HSSFWorkbook) wb); 
            else if (wb instanceof XSSFWorkbook) 
                helper = new XSSFHtmlHelper((XSSFWorkbook) wb); // ligne 159
            else
                throw new IllegalArgumentException(
                        "unknown workbook type: " + wb.getClass().getSimpleName());
        }
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    helper = new XSSFHtmlHelper((XSSFWorkbook) wb);
    Mmmm quelle erreur ? Quelle différence entre le code d'origine et ce que tu as mis à la place : je n'en vois aucune

    Citation Envoyé par Alexandre K. Voir le message
    Pour moi il n'y a pas d'incidence mais je préfère l'indiquer au cas où (j'utilise java 1.6).
    J'ai également ajouté la librairie xmlbeans-2.4.0.jar.
    Pour quelle raison utiliser une version obsolète (depuis février 2011 en public, et complètement en février 2013) ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 20
    Par défaut
    Je te remercie pour les pistes.

    Je ne peux pas utiliser le format PDF. Après avoir généré l'image je dois l'insérer dans un fichier Word.
    J'ai testé avec Java et j'arrive à ajouter une image dans un Word.

    J'ai également testé avec Java la récupération des cellules d'un fichier Excel avec le contenu et le style.
    Je savais que quelque soit la solution il fallait bien récupérer les données en entrée^^

    Je regarde Apache Batik pour voir comment créer une image à partir de plusieurs cellules d'Excel mais avec les éléments que j'ai vu rapidement ça n'a pas l'air évident.

    Pour le code c'est moi qui me suis trompé en recopiant, voilà ce qu'il y avait à l'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     private void setupColorMap() {
            if (wb instanceof HSSFWorkbook) 
                helper = new HSSFHtmlHelper((HSSFWorkbook) wb); 
            else if (wb instanceof XSSFWorkbook) 
                helper = new XSSFHtmlHelper(); // ligne 159
            else
                throw new IllegalArgumentException(
                        "unknown workbook type: " + wb.getClass().getSimpleName());
        }
    Merci pour la remarque, je viens de télécharger la version la plus récente (2.6.0) trouvé sur Maven Repository.

    As-tu déjà utilisé ToHtml pour convertir un fichier Excel ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Alexandre K. Voir le message
    Je te remercie pour les pistes.

    Je ne peux pas utiliser le format PDF. Après avoir généré l'image je dois l'insérer dans un fichier Word.
    Rien ne l'empêche manuellement en tout cas (il faut juste convertir le PDF en Acrobat Document pour le voir). Programmatiquement, je ne sais pas, je n'ai jamais fait.
    Après, je ne comprends pas pourquoi alors tu aurais besoin de passer par une image : un document MS Excel s'inclut très bien directement dans un document MS Word.

    Citation Envoyé par Alexandre K. Voir le message
    J'ai testé avec Java et j'arrive à ajouter une image dans un Word.
    Java n'est pas un format d'image Mais les images PNG, JPG ou autres produites en Java sont standards évidemment.


    J'ai également testé avec Java la récupération des cellules d'un fichier Excel avec le contenu et le style.
    Je savais que quelque soit la solution il fallait bien récupérer les données en entrée^^

    Citation Envoyé par Alexandre K. Voir le message
    Je regarde Apache Batik pour voir comment créer une image à partir de plusieurs cellules d'Excel mais avec les éléments que j'ai vu rapidement ça n'a pas l'air évident.
    C'est sûr que c'est un peu costaud au début : déjà, il faut connaître un peu le format SVG (à la limite tu peux même le générer sans Batik, mais ça risque d'être vraiment beaucoup de boulot).

    Citation Envoyé par Alexandre K. Voir le message
    As-tu déjà utilisé ToHtml pour convertir un fichier Excel ?
    Non. En général, quand j'ai du Excel en entrée, quelque soit le format de sortie, je produis un modèle de données Java interne, voire ça passe par une base de données. Et l'export html, très très rare (les exports dans mon cas, c'est du CSV ou du XML, du PDF (ou du Indesign, mais là j'utilise un outil de ma boite) et parfois du Excel), je le fais moi-même à partir d'un toolkit que j'ai écrit, à partir des données qui n'ont plus rien à voir avec le document Excel.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. [Toutes versions] fusionner des cellules excel ayant la même valeur Java
    Par Marocaine2012 dans le forum Excel
    Réponses: 9
    Dernier message: 26/06/2015, 14h37
  2. [POI] Problème avec les couleurs des cellules Excel
    Par ninoch07 dans le forum Documents
    Réponses: 1
    Dernier message: 15/01/2015, 14h14
  3. Réponses: 13
    Dernier message: 03/09/2013, 13h31
  4. dessiner des cercles sur une image avec java
    Par inès83 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/05/2008, 17h34
  5. je dois implémenter des programmes en traitement d'image avec java.
    Par inès83 dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 22/02/2008, 12h55

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