[Résolu][Java] Performance : remplacer cellules de tableaux

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
richardT
Fraîchement OOthentifié
Messages : 1
Inscription : 11 avr. 2018 13:59

[Résolu][Java] Performance : remplacer cellules de tableaux

Message par richardT »

Bonjour,

J'ai réalisé un générateur de PDF à partir de l'API LibreOffice Java (unoil version 3.2.1 pointant sur LibreOffice).
Je précise que j'ai essayé sur de nombreuses versions de LibreOffice ou OpenOffice, mais je constate le même problème de performance.
J'ai même essayé mon programme sous Linux et même résultat.

J'ai un ODT avec un tableau de texte comportant 6 colonnes et une quarantaine de lignes.
Quand je remplace l'ensemble des cellules de ce tableau avec le code suivant, ça prend une vingtaine de secondes :

Code : Tout sélectionner

List<OooLigne> l = oooTable.getTable();
for (int i = 0; i < l.size(); i++) {
	Map<String, String> map = l.get(i).getLigne();

	for (String cle : map.keySet()) {
		String codeCell = cle + (i + oooTable.getOffset() + 1);
		XText xCellText = (XText) UnoRuntime.queryInterface(XText.class, xTable.getCellByName(codeCell));
		if(map.get(cle)!=null){
			xCellText.setString("ma valeur"); // C'est cet appel qui prend tout le temps
		}
	}
}
Si je commente la ligne suivante, ça tombe à 3 secondes (au lieu de 15 secondes) :
xCellText.setString("ma valeur");

Le XText.setString() semble donc être la cause du problème de performance de la génération de mon PDF.

Y'aurait-il un moyen d'accélérer le remplacement de texte au sein d'un tableau OpenOffice Writer ?

Merci beaucoup pour votre aide.
LibreOffice 5.3 sous Windows 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9252
Inscription : 28 août 2010 08:45

Re: Performance lors du remplacement de cellules de tableaux

Message par micmac »

Bonjour et bienvenue,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question (premier message) d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : https://forum.openoffice.org/fr/forum/s ... html#27295

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Merci de votre collaboration.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: Performance lors du remplacement de cellules de tableaux

Message par Hubert Lambert »

Bonjour,

Chaque appel à l'api implique un passage par les interfaces UNO, ce qui peut vite ralentir une boucle.
Si ton tableau est simple (pas de cellules fusionnées), tu auras intérêt à construire la matrice de données en mémoire et à l'injecter dans le tableau au sortir de la boucle avec la méthode setDataArray de l'interface com.sun.star.sheet.XCellRangeData de l'objet XTable.
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)