jOpenDocument
À l'intérieur
Démonstration d'un accès à une cellule
Je présente ici comment récupérer la valeur d'une cellule d'une manière simple. Comme vu précédemment, on récupère un objet SpreadSheet puis une référence sur body:
SpreadSheet ss = SpreadSheet.createFromFile(file); // Création de l'objet SpreadSheet, et remplissage des objets Element body = this.getContent().getRootElement().getChild("body"); // Récupération de l'élément body final Document getContent() { return ss.getPackage().getEntry("content.xml").getContent().getDocument(); }
A ce niveau là, on pointe vers l'élément body dans le fichier content.xml
On souhaite ensuite accéder à l'onglet dans lequel on veut récupérer la valeur, ici le 1er :
Sheet s = ss.getSheetAtIndex(0); // Récupération de l'onglet souhaité public Element getSheetAtIndex(int index){ NodeList nl = body.getElementsByTagName("spreadsheet"); return (Element) nl.item(index); }
On récupère donc une référence vers le 1er onglet. Maintenant il suffit de convertir la référence par exemple "A2" en coordonnées pour parcourir les listes :

On a donc ici une simple regexp et un algorithme pour transformer une référence en coordonnées. On transforme maintenant une cellule en coordonnées :
Point p = s.resolve("A2"): // Récupération des coordonnées Row r = s.getRowAtIndex(p.getX()); // Récupération de la ligne Cell c = r.getCellAtIndex(p.getY()); // Récupération de la cellule String val = c.getValue(); // Récupération de la valeur
Voici maintenant le bout de code correspondant à l'accès de la cellule vu de l'extérieur:
File file = new File("template/test.ods"); // Ouverture du fichier final Sheet sheet = SpreadSheet.createFromFile(file).getSheet(0); // Récupération de l'onglet souhaité System.out.println(sheet.getCellAt("A2").getValue()); // Récupération de la valeur