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