6
votes

Changer de couleur de fond cellulaire dans LibreOffice

J'utilise LibreOffice 3.5.4.2. Je voudrais changer la couleur de fond des cellules en fonction de diverses conditions. En exemple minimum, j'ai la macro / fonction suivante définie: xxx

i exécute la fonction en entrant = bgcolor () dans une cellule. La cellule dans laquelle cette formule est présente renvoie la valeur de couleur de la première cellule (0,0) ou A1 sur la feuille 1, comme prévu.

Cependant, je ne peux pas obtenir la fonction de modifier la couleur de fond de la cellule A1 . La couleur de fond de cellule pas ne modifie pas lorsque je supprimai la ligne REM dans l'exemple ci-dessus vers Set la couleur d'arrière-plan.

Comment puis-je régler la couleur d'arrière-plan d'une cellule avec une fonction de LibreOffice?

(J'ai lu sur l'utilisation de "styles", mais n'a pas regardé plus loin à cela parce que j'ai besoin de définir de nombreuses couleurs de fond et ne voulait pas faire de nombreux styles différents. Il est possible de changer manuellement la couleur d'arrière-plan sans utiliser de styles. Je pensais donc qu'il serait possible de faire la même chose de manière programmatique.)


1 commentaires

J'ai le même problème: j'ai défini la cellule CellbackColor mais rien ne se passe dans la feuille. Avez-vous résolu votre problème finalement? Des idées?


3 Réponses :


0
votes
Cell.BackColor = RGB(50,60,70) should do the trick
edit: This works only in lowriter. Thanks Campa.

8 commentaires

Je ne sais pas si vous suggérez de remplacer la ligne REM dans mon exemple avec votre ligne ou si votre ligne est un exemple distinct. J'ai essayé les deux approches, mais cela n'a pas résolu le problème. Si je remplace la ligne dans mon exemple avec le vôtre, la cellule renvoie -1 .


J'ai suggéré de remplacer la ligne REM. Mais je ne sais pas ce que Konrad a été édité. Peut-être que ce n'est pas lisible. Conviendrait à une logique étrange dans LO. :) API.LIBREOFFICE.org/ Docs / Common / Ref / Com / Sun / Star / Table / ...


Vérifié ma propre macro pour les tables dans Lowriter. Devrait travailler en localc aussi. `Pour NROW = 0 à OTABLE.GETROWS (). Getcount () - 2 avec oTable.GetRrows (). GetByIndex (nrow) Si NROW MOD 2 = 1 puis .backcolor = -1 autre .backcolor = RVB (192, 192, 192) fin si fin de ... Suivant`


@BDONGUS: Votre solution proposée donne Erreur d'exécution de base. Variable d'objet non définie erreur.


@Campa: Pouvez-vous poster votre code? Sinon, je ne peux que deviner: vous avez utilisé la boucle sans régler avec une otable?


@BDONGUS Hey: Je viens d'obtenir ma cellule en utilisant feuille.gecellbypposition , je n'utilise pas d'objets de table. Alors mycell.cellbackcolor = rgb (255, 0, 0) . Je veux dire, exactement comme Sabrewolfy le faisait.


@Campa: quel objet est indéfini. Si c'est CellBackColor, il pourrait y avoir un bogue dans Calc. Sinon, peut-être que cela aide: lien


@BDONGUS: Non, mon commentaire précédent fait référence à votre relevé Cell.backColor que vous devez corriger votre réponse à cell.cellbackcolor au cas où il s'agit d'une faute de frappe. Dans mon cas, tout se compile bien, mais rien ne se passe simplement sur la feuille (exactement comme la situation de Sabrewolfy). Utilisation de .CurrentSelection comme dans le lien que vous avez donné, jette com.sun.star.lang.indexoutofboundsException sur getcellbyposition .



2
votes

La ligne doit être xxx

(non "REM" là-bas bien sûr, cela ne crée que la ligne commentée)

considère également le paramètre des feuilles d'être 0 au lieu de 1 si vous n'avez qu'une seule feuille

pour d'autres propriétés intéressantes, voir propriétés de la cellule


0 commentaires

3
votes

Premièrement, il n'y a rien de mal avec votre macro en général. La ligne unique pour définir le CellBackColor est correcte comme indiqué. Le problème est que la fonction est appelée à partir de la feuille que vous essayez de modifier. Une fonction n'est pas autorisée à modifier la feuille à partir de laquelle elle s'appelle. Donc, si vous appelez votre fonction de la feuille 1, puis essayez de changer la couleur d'arrière-plan d'une cellule dans la feuille 1, cela échouera. Si, toutefois, vous avez tenté de modifier la couleur d'arrière-plan d'une cellule sur une feuille 0 lorsque vous appelez de feuille 1, cela fonctionnera comme prévu.


3 commentaires

Merci. Veuillez modifier votre réponse pour inclure une source / citation pour référence future?


De wiki.openoffice.org/wiki/documentation/ooo3_user_guides/... : "Lorsqu'une macro est appelée une fonction de calcul, la macro ne peut modifier aucune valeur dans la feuille à partir de laquelle la macro a été appelée."


Cependant, dans les versions plus récentes, il est possible de modifier les valeurs cellulaires mais non des attributs de cellule sur la même feuille.