Bonjour à tous,
Je dois réaliser un tableur dans le cadre d'un mini projet JEE dont voici l'intitulé exact en PJ => Projet.pdf.
Pour être honnête, je suis vraiment médiocre en développement JEE mais voici ce que j'ai déjà réalisé :
cell.java :
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 package interfaces; public interface cell { // Définition du type Cell enum CellType { STRING, NUMBER, FORMULA }; CellType getType(); String getRawValue(); String getComputedValue(); }
Config.java :
Grid.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 package interfaces; public interface Config { /** * Lien du chemin vers le tableur excel */ public static final String cheminTableur = "C:\\Users\\isen\\Desktop\\Projet.xlsx"; }
GridManager.java :
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
26
27
28
29package interfaces; import java.util.List; import interfaces.cell; public interface Grid { /** * @param address * @return la valeur d'une cellule */ String getCell(String address); /** * Attribuer une valeur à une cellule * @param address * @param cell * @return */ String setCell(String address, cell cell); /** * * @return la liste de toutes les cellules ayant une valeur */ List<cell> getAllCells(); }
Ma servlet (TableurServlet.java):
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 package managers; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import interfaces.Config; import interfaces.Grid; import interfaces.cell; import java.util.ArrayList; public class GridManager implements Grid { private Workbook wb; public GridManager() { super(); } /** * Implémentation de la fonction de récupération d'une valeur de cellule */ public String getCell(String address) { String valCell = null; // Ouvrir le fichier excel if(openExcelFile()){ // Récupération de la feuille Sheet sheet1 = wb.getSheetAt(0); // Récupération de la cellule CellReference cellReference = new CellReference(address); Row row = sheet1.getRow(cellReference.getRow()); Cell cell = row.getCell(cellReference.getCol()); if (cell != null){ // Récupération de la valeur DataFormatter formatter = new DataFormatter(); valCell = formatter.formatCellValue(cell); // Si la valeur de la cellule est le résultat d'une formule if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { valCell = cell.getNumericCellValue() + ""; } } }else { System.err.println("Impossible d'accéder au fichier"); } return valCell; } /** * Implémentation de la fonction d'attribution d'une valuer à* une cellule */ public String setCell(String address, cell cell) { // Ouvrir le fichier excel openExcelFile(); // Récupération de la feuille de style Sheet sheet = wb.getSheetAt(0); // Création de cellule CellReference cr = new CellReference(address); int r = cr.getRow(); int c = cr.getCol(); // Remplissage de cellule Row row = sheet.getRow(r); if (row == null) row = sheet.createRow(r); CreationHelper createHelper = wb.getCreationHelper(); row.createCell(c).setCellValue(createHelper.createRichTextString(cell.getRawValue())); // Ecriture dans la feuille FileOutputStream fileOut; try { fileOut = new FileOutputStream(Config.cheminTableur); wb.write(fileOut); fileOut.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return cell.getRawValue(); } /** * Implémentation de la fonction qui retourne la liste de toutes les cellules ayant une valeur */ public List<cell> getAllCells() { List<cell> cells = new ArrayList<cell>(); // Ouvrir le fichier excel openExcelFile(); // Récupération de la feuille Sheet sheet1 = wb.getSheetAt(0); // Récupération des valeurs final DataFormatter formatter = new DataFormatter(); for (Row row : sheet1) { for (final Cell cellule : row) { cell c = new cell() { public cell.CellType getType() { // Récupération du type de la cellule cell.CellType type = null ; switch (cellule.getCellType()) { case Cell.CELL_TYPE_STRING: type = cell.CellType.STRING; break; case Cell.CELL_TYPE_NUMERIC: type = cell.CellType.NUMBER; break; case Cell.CELL_TYPE_FORMULA: type = cell.CellType.FORMULA; break; } return type; } public String getRawValue() { return formatter.formatCellValue(cellule); } public String getComputedValue() { // Si la valeur de la cellule est le résultat d'une formule on retourne le résultat sinon on retourne la valeur de cellule if (cellule.getCellType() == Cell.CELL_TYPE_FORMULA) { return cellule.getNumericCellValue() + ""; }else{ return formatter.formatCellValue(cellule); } } }; cells.add(c); } } return cells; } /** * Fonction d'ouverture du tableur Excel */ public boolean openExcelFile() { try { wb = WorkbookFactory.create(new FileInputStream(Config.cheminTableur)); return true; } catch (InvalidFormatException e) { System.err.println("Format du fichier est invalide"); } catch (FileNotFoundException e) { System.err.println("Le chemin vers fichier est incorrecte"); } catch (IOException e) { e.printStackTrace(); } return false; } }
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107package web; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import interfaces.cell; import interfaces.cell.CellType; import managers.GridManager; /** * Servlet d'implementation */ @WebServlet("/tableurServlet") public class TableurServlet extends HttpServlet { private static final long serialVersionUID = 1L; private GridManager gridManager = new GridManager(); public TableurServlet() { super(); } /** * Récupération de toutes les valeurs ou une seule valeur ou Set d'une valeur depuis url */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Set d'une valeur de cellule if(request.getParameter("address") != null && request.getParameter("value") != null){ // Renvoie vers la méthode doPut pour attribuer la valeur à la cellule doPut(request, response); } // Récupération d'une valeur d'une cellule else if(request.getParameter("address") != null){ // Stockage de la valeur String cellValue = gridManager.getCell(request.getParameter("address")); // Passer le paramétre à la vue index.jsp request.setAttribute("cellValue", cellValue); // Redirection vers la vue index.jsp request.getRequestDispatcher("index.jsp").forward(request, response); } // Récupération des valeurs des cellules remplies else { // Stockage des valeurs récuperés dans une liste List<cell> cells = gridManager.getAllCells(); // Passer le paramétre à la vue index.jsp request.setAttribute("cells", cells); // Redirection vers la vue index.jsp request.getRequestDispatcher("index.jsp").forward(request, response); } } /** * Set d'une valeur d'une cellule depuis formulaire */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Renvoie vers la methode doPut() pour attribuer la valeur à la cellule doPut(request, response); } /** * Set D'une valeur d'une cellule */ @Override protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getParameter("address") != null && request.getParameter("value") != null){ // Récupération des valeurs passés String address = request.getParameter("address"); final String value = request.getParameter("value"); // Remplissage de cellule gridManager.setCell(address, new cell() { public CellType getType() { return CellType.STRING; } public String getRawValue() { return value; } public String getComputedValue() { return value; } }); } } }
Et mon fameux fichier index.jsp dont je ne pige pas grand chose... J'ai tenté ceci :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 <%@page import="org.apache.poi.ss.usermodel.CellValue"%> <%@page import="java.util.List"%> <%@page import="interfaces.*"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <body> <% if (request.getAttribute("cells") != null) { List<cell> cells = (List) request.getAttribute("cells"); %> <h2> <b>Tableau des valeurs : </b> </h2> <table> <% for (cell c : cells) { %> <tr> <td><%=c.getComputedValue()%></td> </tr> <% } %> <% } else if (request.getAttribute("cellValue") != null) { String cellValue = (String) request.getAttribute("cellValue"); %> <p> <b> Valeur de cellule : </b> <%=cellValue%> </p> <% } else { %> <h2> Insertion d'une valeur dans une cellule</h2> <form action="TableurServlet" method="POST"> Adresse de cellule<br> <input type="text" name="address"> <br> Valeur:<br> <input type="text" name="value"> <br> <br> <input type="submit" value="Submit"> </form> <% } %> </table> </body> </html>
Pour l'instant j'ai pas de souci à enregistrer mes valeurs dans mon fichier excel de destination. Je vous épagne les tests unitaires que j'ai écrit sans trop de problème.
Voilà mes soucis:
- Je ne sais absolument pas gérer le langage JSP. Pour l'instant, la page web affiche mon tableau sous cette forme :
Or je voudrais un véritable tableur qui affiche les valeurs selon leur ligne et colonne comme mon fichier excel :
Comment faire ceci en JSP ?
- Second problème:
Pour l'instant, mon code n'arrive pas à faire la distinction entre les types STRING, NUMBER ou FORMULA. Tout est renvoyé en tant que STRING. Si bien que si j'envoie la valeur =13*2 dans ma cellule A1 par exemple, et bien le calcul ne s'effectue pas et il me renvoie exactement "=13*2" ....
Pouvez vous m'éclairer sur ces deux points s'il vous plait ?
En vous remerciant de votre aide précieuse.
Partager