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

Ruby Discussion :

Export de donnés sur un .xlsx existant


Sujet :

Ruby

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    ISEN Toulon
    Inscrit en
    juillet 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ISEN Toulon
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juillet 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Export de donnés sur un .xlsx existant
    Bonjour à tous,

    Commençant le RoR depuis 1 semaine je me trouve confronté à un problème.
    J'aimerai en cliquant sur un lien de ma page d'accueil DL un excel portant des données venu de ma db sous format .sqlite3.
    De plus, j'ai besoin d'utiliser un patron de l'excel en question pour la mise en forme.

    J'ai donc créé un "index.xlsx.axlsx" avec la gestion derrière où au clic je dl l'excel en .xlsx.
    J'ai réussit à écrire dessus pour comprendre le fonctionnement mais voilà impossible d'utiliser le fameux "patron" pour écrire dessus.
    Pour ce qui est de l'export des données je ne m'en suis pas encore occupé.

    Actuellement j'ai utilisé différents gems mais la plupart du temps j'ai des problèmes de version les unes par rapport aux autres notamment avec ces 4 là :
    gem 'rubyzip', '= 1.0.0'
    gem 'axlsx', '= 2.0.1'
    gem 'axlsx_rails'
    gem 'rails', '5.1.2'
    qui vont ensemble mais pas avec les autres gems que j'ai essayé d'utiliser tel que : roo, RubyXL,... bref j'ai fait le tour des gems qui sont soit incompatibles soit je n'arrive pas à les utiliser.

    Je vous remercie par avance de votre aide, si possible m'indiquer 2 gems facile d'utilisation avec le code en exemple s'il vous plait:
    - l'une pour l'écriture sur un .xlsx déjà exsitant (comportant des images, des fusion de cellules,...)
    - l'autre pour y mettre les données de mes différentes tables de ma db s'il vous plait.

    Cordialement.

  2. #2
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    juin 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : juin 2013
    Messages : 136
    Points : 234
    Points
    234
    Par défaut
    > J'ai donc créé un "index.xlsx.axlsx" avec la gestion derrière où au clic je dl l'excel en .xlsx.
    > J'ai réussit à écrire dessus pour comprendre le fonctionnement mais voilà impossible d'utiliser le fameux "patron" pour écrire dessus.
    Comment fais-tu ça, avec quel gem et quelle partie de la doc ? Fournis-nous ton code et on verra.

    > Pour ce qui est de l'export des données je ne m'en suis pas encore occupé.
    Est-ce que tu vois le MVC de Rails ? Est-ce que tu maîtrises tes données ?
    Est-ce que tu peux utiliser le scaffold pour avoir une page web avec tes données ? Une API JSON peut-être ?
    Alors déjà, tu auras bien compris et fait les parties modèle et contrôleur, et on ne s'occupera plus que du format.


    > Actuellement j'ai utilisé différents gems mais la plupart du temps j'ai des problèmes de version les unes par rapport aux autres notamment avec ces 4 là :
    > gem 'rubyzip', '= 1.0.0' gem 'axlsx', '= 2.0.1' gem 'axlsx_rails' gem 'rails', '5.1.2'
    > qui vont ensemble mais pas avec les autres gems que j'ai essayé d'utiliser tel que : roo, RubyXL,... bref j'ai fait le tour des gems qui sont soit incompatibles soit je n'arrive pas à les utiliser.

    Ça semble bien. ROO et RubyXL sont des bibliothèques "concurrentes", tu dois en choisir une seule et là tu as choisi AXLSX, ça semble correct.


    > Je vous remercie par avance de votre aide, si possible m'indiquer 2 gems facile d'utilisation avec le code en exemple s'il vous plait:
    > - l'une pour l'écriture sur un .xlsx déjà exsitant (comportant des images, des fusion de cellules,...)
    > - l'autre pour y mettre les données de mes différentes tables de ma db s'il vous plait.

    Je pense que c'est une mauvaise chose de te donner la solution, et que c'est une bonne chose de chercher par soi-même
    Visiblement tu as réussi à trouver les gems tout seul, et ils fournissent sûrement des exemples.
    Il faut que tu apprennes à quel endroit ils se placent et comment les enchaîner : sinon je pourrais te donner du code, tu n'en ferais rien.

    Bon courage !

  3. #3
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    juin 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : juin 2013
    Messages : 136
    Points : 234
    Points
    234
    Par défaut
    Voici un exemple pour un export de données pures (pas de template) en CSV, tu "n'as plus qu'à" l'adapter pour utiliser ton gem XLSX favori :
    https://gorails.com/episodes/export-to-csv

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    ISEN Toulon
    Inscrit en
    juillet 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ISEN Toulon
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juillet 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci de vos réponse, grâce à elles, j'ai réussi avant-hier à faire ce que je voulais.
    Maintenant j'aimerai exporter les données depuis 2 tables.
    J'aimerai savoir si il existe un moyen de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @bidon.each do |bidon, bidule|
        sheet.add_row [bidon.a, bidule.b]
      end
    Si oui comment le rendre cohérent par rapport à mon controller ?
    J'ai actuellement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def index
        @bidons =  Bidon.all
     
        respond_to do |format|
          format.html
          format.xlsx
        end
      end
    Je sais qu'il n'est pas possible de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def index
        @bidons =  Bidon.all
        @bidules = Bidule.all
     
        respond_to do |format|
          format.html
          format.xlsx
        end
      end
    Si vous avez une solution à mon problème SVP!

    Cordialement.

  5. #5
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    juin 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : juin 2013
    Messages : 136
    Points : 234
    Points
    234
    Par défaut
    Alors,

    si tu as deux tableaux tu peux les réunir à l'aide de ZIP. C'est du "ruby pur" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    prenoms = ["Kylian", "Hugo", "Didier"]
    ages = [19, 31, 49]
    resultat = []
    prenoms.zip(ages).each{|prenom, age|
      resultat << "#{prenom} a #{age} ans"
    }
    mais si tu as une modélisation et des modèles Rails, le mieux est de faire une jointure :

    modèle Voiture : Voiture Belongs to Conducteur, champs "modele, immatriculation"
    modèle Conducteur : Conducteur Has Many Voitures, champs "nom, prenom"
    export avec une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Voiture.joins(:conducteur).map{|voiture|
      if voiture.conducteur
        [voiture.modele, voiture.immatriculation, voiture.conducteur.nom, voiture.conducteur.prenom]
      else
        [voiture.modele, voiture.immatriculation, "pas de conducteur", '']
      end
    }
    et le tout se fait "rapidement" et avec une seule requête SQL.

    Si jamais tu oublies de faire .joins(:conducteur), le code fonctionne encore... mais Rails fera 1 requête pour toutes les voitures, ET une autre requête PAR CONDUCTEUR.
    Ça ne se voit pas pour un export de 200 lignes, mais ça fait ramer si tu as 500'000 voitures...

Discussions similaires

  1. [XL-2007] Macro pour exporter des données sur WORD vers Excel (version 2007)
    Par krokos55 dans le forum Macros et VBA Excel
    Réponses: 26
    Dernier message: 31/10/2012, 13h10
  2. [AC-2003] Exporter une requête sur un Excel existant
    Par Williamm dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/07/2011, 15h19
  3. exportation de données sur pst
    Par arctica dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 14/12/2010, 11h28
  4. Export de données sur xls
    Par neuneu1 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 03/06/2008, 18h36
  5. [Excel] Exporter des données sur Excel
    Par toffff dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/05/2007, 11h54

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