7
votes

Comment créer un Excel avec un objet sous Android et l'envoyer par e-mail

Sur mon application, j'ai un objet de records, disons que je dois faire un quiz avec plus de 5 gars, donc je peux ensuite obtenir les résultats de chacun d'eux et j'ai un objet avec toutes ces informations, est-ce possible de convertir cet objet en un fichier Excel? Par exemple:

|---------------------|------------------|
|        Quiz         |     Question 1   |...
|---------------------|------------------|
|      Quiz Name      |    What's 1+1    |...
|---------------------|------------------|

Quelque chose comme ça, pour savoir à chaque utilisateur ce qui a répondu et son score, tout cela, je l'ai sur mon objet.

Et puis si je peux envoyez-le par courrier au format .xls ou quel que soit le format.

MODIFIER

Par exemple, j'aurai besoin du nom du quiz et si je peux en ajouter plus sur ce quiz, c'est ok, mais alors j'ai besoin pour ajouter tous les utilisateurs ont demandé ce quiz (un autre objet de l'api) afin que je puisse obtenir le nom et le score.

J'aimerais avoir un .csv ou un Excel quel que soit l'endroit où il est dit explicite:

Disons que j'ai une liste de:

  1. createdAt
  2. mis à jour à
  3. utilisateur (juste l'utilisateur.email)
  4. quiz (juste le quiz.name)
  5. totalPoints

Je veux donc le remplir dans le .csv ou un Excel peu importe


8 commentaires

Vous ne pouvez pas avoir un Parser pour faire ça?


Bien sûr, pouvez-vous fournir un échantillon? Je devrais mettre les mêmes informations de l'objet dans Excel


Des nouvelles de ça?


pourquoi ne pas créer un fichier CSV à la place?


@farhanjk pouvez-vous donner un exemple? Donc, si je crée un csv, je peux ensuite l'envoyer par e-mail et l'ouvrir à partir d'un Excel ??


Vous pouvez utiliser Apache POI. Voici un bon tutoriel pour vous aider sur votre chemin: callicoder.com / java-write-excel-file-apache-poi


@MWB Ne fonctionne pas pour moi ça


@StuartDTO: Veuillez voir ma réponse ci-dessous.


4 Réponses :


6
votes

Un fichier CSV est un simple fichier texte séparé par des virgules. Dans votre cas, le format sera:

Quiz,Question 1
Quiz Name,What's 1+1

Tant que vous serez capable d'écrire des enregistrements au format ci-dessus dans un fichier avec l'extension "csv", vous pourrez l'ouvrir dans Excel et envoyez-le aussi par e-mail.

Veuillez vous référer au post suivant de stackoverflow.

Comment créer un .csv sur Android


0 commentaires

3
votes

Voici un exemple de ce que vous pourriez faire.

J'ai d'abord créé une classe Question:

implementation "org.apache.poi:poi:3.17"
implementation "org.apache.poi:poi-ooxml:3.17"

Et une classe Quiz:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>mail-excel</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
    </dependencies>

</project>

Ensuite, voici l'application réelle, où j'utilise Apache POI:

public class MailExcel {

    public static void main(String[] args) {

        //Creating the quiz

        Quiz mQuiz = new Quiz();
        mQuiz.quizName = "Excel-quiz";
        Question question1 = new Question("Where do you find the best answers?", "Stack-Overflow");
        Question question2 = new Question("Who to ask?", "mwb");
        mQuiz.addQuestion(question1);
        mQuiz.addQuestion(question2);


        //Creating the workbook

        Workbook workbook = new XSSFWorkbook();
        CreationHelper creationHelper = workbook.getCreationHelper();
        Sheet sheet = workbook.createSheet("Quiz");
        Row row1 = sheet.createRow(0);
        Row row2 = sheet.createRow(1);
        row1.createCell(0).setCellValue("Quiz");
        row2.createCell(0).setCellValue(mQuiz.quizName);
        int col = 1;
        for (Question question: mQuiz.questions) {
            row1.createCell(col).setCellValue("Question " + col);
            row2.createCell(col).setCellValue(question.question);
            col++;
        }


        //Creating and saving the file

        FileOutputStream file = null;
        try {
            file = new FileOutputStream("quiz.xlsx");
            workbook.write(file);
            file.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

Ce qui est important, c'est que vous incluiez le fichier jar- fichiers pour org.apache.poi. Ou, comme je l'ai fait, ajoutez les dépendances à votre fichier pom Maven (ou fichier gradle, par exemple, si vous faites du développement Android). Voici mon fichier pom:

public class Quiz {

    String quizName;
    List<Question> questions;

    void addQuestion(Question question) {
        if (null == questions) {
            questions = new ArrayList<>();
        }
        questions.add(question);
    }
}

J'espère que cela fonctionne pour vous (fonctionne pour moi)!

J'ai téléchargé ma solution sur GitHub: https://github.com/mwbouwkamp/create-excel

En cas de Développement Android, ajoutez la dépendance suivante:

class Question {
    String question;
    String answer;

    Question(String question, String answer) {
        this.question = question;
        this.answer = answer;
    }
}


1 commentaires

4
votes

Vous pouvez également utiliser Open CSV.

<dependency> 
    <groupId>com.opencsv</groupId> 
    <artifactId>opencsv</artifactId> 
    <version>4.1</version> 
</dependency> 

vous pouvez vous référer à ceci.

Objet Java vers fichier CSV


0 commentaires

3
votes

Si vous souhaitez utiliser votre application en mode hors connexion, vous pouvez utiliser Apache POI, déjà répondu par MWB, mais puisque vous avez mentionné d'envoyer le fichier par courrier électronique, je suppose qu'il n'y a aucune restriction sur l'accès à Internet et que vous pouvez donc envisager la solution suivante .

Les Google App Scripts simplifient considérablement le processus de récupération des données. à partir de Google Sheets, en composant un modèle d'e-mail avec les données spécifiées de Google Sheets. Google dispose de l ' API SHEETS v4 que vous pouvez intégrer dans votre application Android pour travailler avec une feuille. Vous pouvez effectuer tout ce processus automatisé à l'aide de JavaScript dans Google App Script ou utiliser les API si vous préférez l'intégrer dans votre application.


0 commentaires