nathalie85 Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 (modifié) Bonjour à tous, Voila j'aimerai récupéré les données de ma base dans un fichier excel, à partir de mon application à l'aide d'un menu ou un bouton.... Mais je ne sais pas pas comment procéder. Des idées?? Merci d'avance. Modifié 9 mars 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Naskel Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 Bonjour, Une technique assez simple mais assez longue à mettre en place serait de parcourir tes tables et de créer des fichier .csv associés à tes tables. Cordialement, Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 En fonction de ce que tu entends par 'fichier Excel', ce peut être plus ou moins simple. Si le fichier résultat doit avoir le format propriétaire Excel (un vrai .xls), alors il faudrait s'appuyer sur une librairie qui peut générer ce format; je ne sais pas si une telle librairie est disponible sur la plateforme Android. S'il s'agit simplement de générer un fichier au format CSV, cela est assez simple; il suffit de parcourir le Cursor qui correspond à tes données, et de générer le fichier ligne par ligne. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 un fichier html avec l’extension ".xls" marche aussi ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 26 janvier 2011 Auteur Share Posté(e) 26 janvier 2011 oui chpil c'est un fichier au format CSV, as tu un exemple? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
debutant76 Posté(e) 27 janvier 2011 Share Posté(e) 27 janvier 2011 Bonjour à tous, Voila j'aimerai exporté les données de ma base SQLite dans un fichier Excel à partir de mon application à l'aide d'un menu ou un bouton.... Mais je ne sais pas pas comment procéder. Des idées?? Merci d'avance. Salut, J'ai vu dans un sujet précédent que tu voulais mettre en place un formulaire, as tu réussis ? je connais le même genre de problème avec ma base de données et j'aimerais te demander des conseils. D'avance merci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 27 janvier 2011 Share Posté(e) 27 janvier 2011 oui chpil c'est un fichier au format CSV, as tu un exemple? Non, désolé, je n'ai pas d'exemple sous la main Mais, sincèrement, ce n'est pas très difficile à mettre en oeuvre J'ai vu dans un sujet précédent que tu voulais mettre en place un formulaire, as tu réussis ?je connais le même genre de problème avec ma base de données et j'aimerais te demander des conseils. Pour la bonne lisibilité de ce forum, il aurait été préférable que tu poses ta question dans le thread auquel tu fais référence, plutôt que dans celui-ci Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 28 janvier 2011 Auteur Share Posté(e) 28 janvier 2011 Ok chpil je vais essayer et je te tiens au courant. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 28 janvier 2011 Auteur Share Posté(e) 28 janvier 2011 Oui débutant 76 j'ai réussi à mettre en place mon formulaire, mais comme a dit chpil pose moi les questions dans le thread auquel tu fais référence. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
SlayTaniK Posté(e) 28 janvier 2011 Share Posté(e) 28 janvier 2011 (modifié) oui chpil c'est un fichier au format CSV, as tu un exemple? je n'ai pas encore touché a la partie SQLite.. mais une de mes techniques SQL pour exporter en .csv est de rajouter "," apres chaque champs lors de ton select select champ1 + "," + champs2 + "," from table ca marche aussi avec ";" et les tabulation etc... et tu ecris sur un fichier text plat avec extension .CSV ligne par ligne tes resultats. ! attention a l'encodage des caracteres ! j'espere t'avoir aider ^^ EDIT : fais attention a la conversion automatique quand tu fais le + ... Modifié 28 janvier 2011 par SlayTaniK Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 28 janvier 2011 Share Posté(e) 28 janvier 2011 Je ne conseillerais pas de faire ainsi: - c'est déporter dans le moteur de base de données, qui n'est pas fait pour cela, la gestion de la génération du résultat (formatage, encodage, etc..) - cela va à l'encontre de la façon de récupérer les résultats issus de la base de données d'Android, au travers des Cursors, qui est orientée 'champ' (via les getString/getInt/...) Il est préférable d'implémenter la génération des lignes du fichier résultat en code Java, et de pouvoir gérer plus facilement formatage, encodage et autres Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 2 mars 2011 Auteur Share Posté(e) 2 mars 2011 Je reviens vers toi chpil, je suis entrain de faire ce que tu m'as dit pour l'export des données sqlite. J'ai fait un cursor: public Cursor ExportPersonnes(){ return bd.query("personne", new String[]{ "_id", "nom", "prenom", "age"},null, null, null, null, null); } Et ensuite j'appelle ce cursor: protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); super.onCreate(savedInstanceState); bd = new DBAdapter(this); bd.open(); Cursor cursor1 = bd.ExportPersonnes(); Mais par contre pour la suite "générer le fichier ligne par ligne" je ne sais pas comment le faire, je n'ai pas trouvé non plus comment écrire dans un fichier csv sous android. Si tu as des idées, elles seront les bienvenus. Merci d'avance. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 2 mars 2011 Share Posté(e) 2 mars 2011 (modifié) Grosso-modo, en presque pseudo-code, ça pourrait ressembler à ça: FileWriter writer = ... // création du FileWriter, en fonction de l'endroit où stocker le fichier int idIndex = cursor1.getColumnIndexOrThrow("_id"); // .. idem pour les autres colonnes while (!cursor1.isAfterLast()) { StringBuilder buffer = new StringBuilder(); // ou new StringBuilder(taille) si tu as une bonne idée de la taille d'une ligne, ce qui évitera des allocations mémoire intempestives... String idPers = cursor1.getString(idIndex); // Idem pour les autres colonnes builder.clear(); builder.append(idPers); builder.append(';'); // séparateur // idem pour les autres colonnes ... builder.append("\n"); writer.write(builder.toString()); cursor1.moveToNext(); } writer.close(); Code perfectible, qui ne doit pas compiler tel quel (il faut au moins lui rajouter la gestion des exceptions); pour bien faire, il faudrait aussi gérer l'escaping des séparateurs qui peuvent apparaître dans les valeurs des colonnes Edit: manquait un moveToNext() dans le code Modifié 2 mars 2011 par chpil Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 Merci chpil pour ta réponse. J'ai essayé ton code protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.main); super.onCreate(savedInstanceState); bd = new DBAdapter(this); bd.open(); Cursor cursor1 = bd.ExportPersonnes(); FileWriter writer; try { writer = new FileWriter("C:\test.csv"); int idIndex = cursor1.getColumnIndexOrThrow("_id"); // .. idem pour les autres colonnes while (!cursor1.isAfterLast()) { StringBuilder buffer = new StringBuilder(); // ou new StringBuilder(taille) si tu as une bonne idée de la taille d'une ligne, ce qui évitera des allocations mémoire intempestives... String idPers = cursor1.getString(idIndex); // Idem pour les autres colonnes /*buffer.clear();*/ buffer.append(idPers); buffer.append(';'); // séparateur // idem pour les autres colonnes buffer.append("\n"); writer.write(buffer.toString()); cursor1.moveToNext();} writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Mais ça ne marche pas, est ce que j'ai mal mis le try/catch? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 mars 2011 Share Posté(e) 3 mars 2011 Déjà, il y a un truc qui ne risque pas de marcher, c'est le nom du fichier dans lequel tu veux écrire: "C:\test.csv", c'est bon pour du Windows, mais sur Android, c'est différent. Un chemin du style "/sdcard/test.csv" serait plus approprié Et pour faire encore plus propre File f = new File(Environment.getExternalStorageDirectory(), "test.csv"); FileWriter writer = new FileWriter(f); donne le même résultat Et si "ça ne marche toujours pas" après cela, stp, essaye d'être un peu plus précise dans la description du problème que tu rencontres (quelle exception se produit ? traces de logs ? ... plutôt qu'un simple "ça ne marche pas" ;) ) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 D'accord dslée, je serai plus précise. J'ai mis le fichier dans la racine du projet dans le workspace et j'ai écrit: File f = new File("/Projet/test.csv"); FileWriter writer = new FileWriter(f); et j'ai les erreurs suivantes: 03-03 15:25:27.737: WARN/System.err(304): java.io.FileNotFoundException: /Projet/test.csv (No such file or directory) 03-03 15:25:27.957: WARN/System.err(304): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 03-03 15:25:27.957: WARN/System.err(304): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 03-03 15:25:27.967: WARN/System.err(304): at java.io.FileOutputStream.<init>(FileOutputStream.java:97) 03-03 15:25:27.967: WARN/System.err(304): at java.io.FileOutputStream.<init>(FileOutputStream.java:69) 03-03 15:25:27.967: WARN/System.err(304): at java.io.FileWriter.<init>(FileWriter.java:42) 03-03 15:25:27.977: WARN/System.err(304): at com.projet.Projet.Main.onCreate(Main.java:28) 03-03 15:25:27.977: WARN/System.err(304): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 03-03 15:25:27.987: WARN/System.err(304): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 03-03 15:25:27.987: WARN/System.err(304): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 03-03 15:25:27.999: WARN/System.err(304): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 03-03 15:25:27.999: WARN/System.err(304): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 03-03 15:25:28.008: WARN/System.err(304): at android.os.Handler.dispatchMessage(Handler.java:99) 03-03 15:25:28.008: WARN/System.err(304): at android.os.Looper.loop(Looper.java:123) 03-03 15:25:28.018: WARN/System.err(304): at android.app.ActivityThread.main(ActivityThread.java:4627) 03-03 15:25:28.018: WARN/System.err(304): at java.lang.reflect.Method.invokeNative(Native Method) 03-03 15:25:28.028: WARN/System.err(304): at java.lang.reflect.Method.invoke(Method.java:521) 03-03 15:25:28.037: WARN/System.err(304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 03-03 15:25:28.037: WARN/System.err(304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 03-03 15:25:28.047: WARN/System.err(304): at dalvik.system.NativeStart.main(Native Method) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 3 mars 2011 Share Posté(e) 3 mars 2011 (modifié) Tu n'as pas le droit d'écrire ou tu veux sur android. De plus il faut avoir créé ton répertoire avant. Donc soit du fait comme le dit chpil et tu le mets sur la sdcard, soit tu le mets dans ton tel mais sans mettre un / au début du chemin et la il sera dans le répertoire de ton appli. (bon courage pour le retrouver après http://developer.android.com/guide/topics/data/data-storage.html#filesInternal http://developer.android.com/reference/java/io/File.html Modifié 3 mars 2011 par moritan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 (modifié) J'ai essayé d'accéder à la sdcard pour mettre le fichier et pouvoir écrire"/sdcard/test.csv", mais la console me répond que l'exécutable est introuvable. Il y a t 'il un autre emplacement ou je peux mettre mon fichier?(je travaille avec un emulateur) Modifié 3 mars 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 3 mars 2011 Share Posté(e) 3 mars 2011 (modifié) il ne faut pas mettre le /sdcard en dur ça peut changer d'un tel à l'autre, as tu essayé le code de schpil ? Et as tu mis à jour ton manifest ? Modifié 3 mars 2011 par moritan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 oui c'est avec son code que je travaille, mais j'ai rien changé dans le manifest. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 J'ai essayé ce que tu m'as dit chpil : File f = new File(Environment.getExternalStorageDirectory(), "test.csv"); FileWriter writer = new FileWriter(f); et voila ce que dit le logcat: 03-03 16:34:33.437: WARN/System.err(389): java.io.FileNotFoundException: /mnt/sdcard/test.csv (Permission denied) 03-03 16:34:33.499: WARN/System.err(389): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) 03-03 16:34:33.499: WARN/System.err(389): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) 03-03 16:34:33.507: WARN/System.err(389): at java.io.FileOutputStream.<init>(FileOutputStream.java:97) 03-03 16:34:33.524: WARN/System.err(389): at java.io.FileOutputStream.<init>(FileOutputStream.java:69) 03-03 16:34:33.528: WARN/System.err(389): at java.io.FileWriter.<init>(FileWriter.java:42) 03-03 16:34:33.538: WARN/System.err(389): at com.projet.Projet.Main.onCreate(Main.java:31) 03-03 16:34:33.538: WARN/System.err(389): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 03-03 16:34:33.548: WARN/System.err(389): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 03-03 16:34:33.548: WARN/System.err(389): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 03-03 16:34:33.557: WARN/System.err(389): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 03-03 16:34:33.557: WARN/System.err(389): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 03-03 16:34:33.567: WARN/System.err(389): at android.os.Handler.dispatchMessage(Handler.java:99) 03-03 16:34:33.577: WARN/System.err(389): at android.os.Looper.loop(Looper.java:123) 03-03 16:34:33.587: WARN/System.err(389): at android.app.ActivityThread.main(ActivityThread.java:4627) 03-03 16:34:33.587: WARN/System.err(389): at java.lang.reflect.Method.invokeNative(Native Method) 03-03 16:34:33.587: WARN/System.err(389): at java.lang.reflect.Method.invoke(Method.java:521) 03-03 16:34:33.598: WARN/System.err(389): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 03-03 16:34:33.608: WARN/System.err(389): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 03-03 16:34:33.608: WARN/System.err(389): at dalvik.system.NativeStart.main(Native Method) Sachant que le fichier test.csv est dans le workspace eclipse à la racine du projet. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 3 mars 2011 Share Posté(e) 3 mars 2011 il te faut la permission d'écrire sur la sdcard <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 3 mars 2011 Auteur Share Posté(e) 3 mars 2011 je l'ai déjà cette permission. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 mars 2011 Share Posté(e) 3 mars 2011 Si tu as la permission adéquate dans le androidManifest.xml, tu ne devrais pas avoir cette erreur. Pour autant, tu as un accès refusé lors de la création du fichier... As-tu bien une SD card (simulée) dans ton émulateur ? (on l'indique quand on crée la première fois la configuration de l'émulateur) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nathalie85 Posté(e) 4 mars 2011 Auteur Share Posté(e) 4 mars 2011 (modifié) Dans le DDMS, dans file explorer, j'ai trouvé un fichier nommé mnt et il contient un fichier sdcard par contre pour les permissions le fichier sdcard il y a que d-------. Modifié 4 mars 2011 par nathalie85 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.