[Résolu]retourner une phrase

Discussions et questions sur tout ce qui concerne la programmation sous StarOffice NeoOffice ou OpenOffice.org tous langages et tous modules confondus.

Modérateur: Vilains modOOos

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 !

[Résolu]retourner une phrase

Messagepar mimi31110 » 01 Juin 2006 17:14

salut !

je manipule open office writer avec java, et je voudrais pouvoir retourner une phrase complète à 90°, et l'enregistrement d'une macro ne m'a pas aidé, il faut que je puisse le faire avec l'API UNO...

la phrase est repérée par une balise "[VERT]" et est toujours dans un tableau... si ça a une importance quelconque...

il me faut donc la sélectionner pour la retourner... mais je coince...

vous avez une petite idée ???

merci à tous
Dernière édition par mimi31110 le 13 Juin 2006 12:24, édité 1 fois au total.
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar Dude » 01 Juin 2006 17:41

Tu crées un document avec un tableau d'une seule cellule et tu lances cette macro :

Code: Tout sélectionner   AgrandirRéduire
Sub rotationTexte()

otext = thisComponent.getText()
otable = thisComponent.getTextTables().getByIndex(0)
ocell = otable.getCellByName("A1")
cellcontent = ocell.getText()
cellcontent.setString("[VERT]")
cursor = cellcontent.createTextCursor()
cursor.goToStart(False)
cursor.goToEndOfWord(True)

cursor.setPropertyValue("CharRotation", 900)

End Sub
OOo 3.2DEV EN sous Windows XP SP3

Pratique, utilisez le service CiJoint pour joindre un exemple et illustrer votre propos.

Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.

Améliorer OOo en votant les issues
Avatar de l’utilisateur
Dude
GourOOou
GourOOou
 
Messages: 7936
Inscrit le: 03 Mar 2006 09:45
Localisation: Lyon, France

Messagepar mimi31110 » 02 Juin 2006 13:56

je dois le faire en java, c'est ça qui me pose problème.
je recherche les balise et retourne les phrases contenant ces balises...
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar bm92 » 02 Juin 2006 15:36

mimi31110 a écrit:je dois le faire en java, c'est ça qui me pose problème.

Le Developer's Guide du SDK fournit beaucoup d'exemples en Java.
Avec Java il est indispensable de connaître l'API OpenOffice "dans le texte": Developer's Guide et IDL.
Bon courage.
bm92
SuppOOorter
SuppOOorter
 
Messages: 1377
Inscrit le: 26 Nov 2005 15:42

Messagepar mimi31110 » 06 Juin 2006 10:44

Le Developer guide est presque devenu mon livre de chevet depuis quelques semaines !!!
mais je n'ai pas trouvé comment retourner une phrase dans writer.
l'API propose un attribut CharRotation dans propertyValue mais je ne parvient pas à le faire fonctionner... quelqu'un s'en ai déjà servi ???
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar chater » 06 Juin 2006 11:15

A tester :
Code: Tout sélectionner   AgrandirRéduire
// création objet curseur
XTextCursor oCurs = oTableText.createTextCursor();
// obtenir les propriétés
XPropertySet oCursP = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, oCurs);

try {
   // obtenir propriété à changer
   short rotation = ((Short)oCursP.getPropertyValue("CharRotation")).shortValue();
   // ajuster la propriété
   rotation = 900;
   // rotation du texte à la nouvelle valeur
   oCursP.setPropertyValue("CharRotation", new Short(rotation));
} catch (Exception ex) { // exception }
OOo 3.1 officielle sous Ubuntu 9.04

Pensez à aider les autres en répondant à leurs questions.
Avatar de l’utilisateur
chater
Membre cOOonfirmé
Membre cOOonfirmé
 
Messages: 237
Inscrit le: 21 Fév 2006 15:43
Localisation: Paname

Messagepar mimi31110 » 06 Juin 2006 11:19

merci, je teste immédiatement ... :D
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar mimi31110 » 06 Juin 2006 14:03

ça fonctionne merci ...

mais je ne parvient pas exactement à faire ce que je veux :
je recherche un balise dans un document ouvert, et je voudrais retourner la phrase complète mais il n'y a que le texte de replacement qui est vertical.

comment sélectionner la phrase entière ???

voici mon code :

Code: Tout sélectionner   AgrandirRéduire
XTextDocument xTextDoc = (com.sun.star.text.XTextDocument)UnoRuntime.queryInterface(com.sun.star.text.XTextDocument.class, xWriterComponent);
         
         //***********************************************************
         // RECHERCHE LA BALISE [VERT] ET RETOURNE LE TEXTE ASSOCIE
         //***********************************************************
         
         // ajuster la propriété
           short rotation = 900;
           short noRotation = 0;
           // Create textdocument
           XTextCursor xTextCursor = null;
                       
            XText xText = (XText)xTextDoc.getText();
            xTextCursor = (XTextCursor) xText.createTextCursor();
           
            //recherche la balise [VERT]
            XSearchable xSearch = (XSearchable) UnoRuntime.queryInterface(XSearchable.class, xWriterComponent);
            XSearchDescriptor xSearchDesc = xSearch.createSearchDescriptor();
           
            xSearchDesc.setSearchString("[VERT]");
            Object result = xSearch.findFirst(xSearchDesc);
            while (result != null)
            {
               XPropertySet xCPS = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, result);
                xCPS.setPropertyValue("CharRotation", new Short (rotation));
                result = xSearch.findNext(result, xSearchDesc);
            }
           
            //***************************************************************
            //RECHERCHE ET REMPLACE LA BALISE [VERT]
            //***************************************************************
            XReplaceable xReplaceable = (XReplaceable) UnoRuntime.queryInterface(XReplaceable.class, xWriterComponent);
            XReplaceDescriptor xRepDesc = xReplaceable.createReplaceDescriptor();
           // set a string to search for
           xRepDesc.setSearchString("[VERT]");
          
           // set the string to be inserted
           xRepDesc.setReplaceString("test");
          
           //         create an array of one property value for a CharWeight property
              PropertyValue[] aReplaceArgs = new PropertyValue[1];
              aReplaceArgs[0] = new PropertyValue();
              aReplaceArgs[0].Name = "CharWeight";
              aReplaceArgs[0].Value = new Float (com.sun.star.awt.FontWeight.BOLD);
              
           // set our sequence with one property value as ReplaceAttribute
              XPropertyReplace xPropRepl = (XPropertyReplace) UnoRuntime.queryInterface(XPropertyReplace.class, xRepDesc);
              xPropRepl.setReplaceAttributes(aReplaceArgs);
           // replace
              int nResult = xReplaceable.replaceAll(xRepDesc);
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar mimi31110 » 08 Juin 2006 09:29

personne ne sait comment selectionner une phrase ??? :?

même un bout de code dans un autre contexte, je suis preneuse ...
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar chater » 09 Juin 2006 17:49

Pas trop le temps de chercher mais as-tu regardé ici :
http://api.openoffice.org/docs/common/r ... ursor.html
OOo 3.1 officielle sous Ubuntu 9.04

Pensez à aider les autres en répondant à leurs questions.
Avatar de l’utilisateur
chater
Membre cOOonfirmé
Membre cOOonfirmé
 
Messages: 237
Inscrit le: 21 Fév 2006 15:43
Localisation: Paname

Messagepar mimi31110 » 12 Juin 2006 11:18

oui, en fait, lorsque je crée n'importe quel curseur dans la boucle
Code: Tout sélectionner   AgrandirRéduire
while (result != null)
le pointeur qui est censé définir le curseur est null... donc il me génère une erreur...
j'utilise createTextCursorByRange(result) mais ça marche pas
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar chater » 12 Juin 2006 15:31

Regarde l'annexe du bouquin de Marcelly, tu as un exemple :
http://www.editions-eyrolles.com/Chapit ... rcelly.pdf
OOo 3.1 officielle sous Ubuntu 9.04

Pensez à aider les autres en répondant à leurs questions.
Avatar de l’utilisateur
chater
Membre cOOonfirmé
Membre cOOonfirmé
 
Messages: 237
Inscrit le: 21 Fév 2006 15:43
Localisation: Paname

Messagepar mimi31110 » 12 Juin 2006 15:53

voici ce que je fais dans la boucle :

Code: Tout sélectionner   AgrandirRéduire
while (result != null)
            {
               System.out.println("entrée dans la boucle...");
               XPropertySet xCPS = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, result);
               System.out.println("property set...");
               XTextRange test = (XTextRange) result;
               XTextCursor xTextCursor = (XTextCursor) xText.createTextCursorByRange(test);
               xTextCursor.getText().insertString( xTextCursor, "Insertion de texte pour localiser le curseur...", true);
                xCPS.setPropertyValue("CharRotation", new Short (rotation));
                System.out.println("balise suivante...");
                result = xSearch.findNext(result, xSearchDesc);
            }


théoriquement, il devrait m'écrire "Insertion de texte pour localiser le curseur..." à l'endroit ou se trouve la balise puisque result représente la position de la balise trouvée (sous forme d'un Object)

mais voilà ce qu'il me génère :

Code: Tout sélectionner   AgrandirRéduire
entrée dans la boucle...
property set...
null
java.lang.ClassCastException
   at test.tests2.executeVert(tests2.java:94)
   at test.tests2.useWriter(tests2.java:53)
   at test.tests2.useDocuments(tests2.java:45)
   at test.tests2.main(tests2.java:30)


la ligne 94 étant :

Code: Tout sélectionner   AgrandirRéduire
XTextRange test = (XTextRange) result;


je ne comprends pas pourquoi il me renvoit un pointeur null dans la variable "test" alors que la variable "result" n'est pas nulle....
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)

Messagepar chater » 13 Juin 2006 09:25

Teste déjà l'exemple de la page 5.
OOo 3.1 officielle sous Ubuntu 9.04

Pensez à aider les autres en répondant à leurs questions.
Avatar de l’utilisateur
chater
Membre cOOonfirmé
Membre cOOonfirmé
 
Messages: 237
Inscrit le: 21 Fév 2006 15:43
Localisation: Paname

Messagepar mimi31110 » 13 Juin 2006 12:24

l'exemple fonctionne, merci

mais j'ai trouvé une autre solution au problème :

je sais que si il existe une phrase à mettre à la verticale, elle est dans un tableau et dans la cellule A2 de ce tableau.
je récupère donc tous les tableaux de mon doc
je crée un curseur dans la cellule A2
si le texte de cette cellule se termine par la balise [VERT], je réécris cette phrase avec la propriété verticale
sinon, je passe au tableau suivant

voici le code :
Code: Tout sélectionner   AgrandirRéduire
//***********************************************************
      // RECHERCHE TOUS LES TABLEAUX DU DOCUMENT
      //  SI LA CELLULE A2 A SON TEXTE QUI DE TERMINE PAR "[VERT]"
      //   ALORS JE REECRIS LA PRHASE AVEC LA PROPRIETE VERTICALE
      //  SINON, JE NE FAIS RIEN
      //***********************************************************
      
   // ajuster la propriété
        short rotation = 900;
       
        XTextDocument xTextDoc = (XTextDocument)UnoRuntime.queryInterface(XTextDocument.class, xWriterComponent);
        XText xText = (XText)xTextDoc.getText();
       
        XTextTablesSupplier tab = (XTextTablesSupplier)UnoRuntime.queryInterface(XTextTablesSupplier.class, xWriterComponent);
        XNameAccess tables = tab.getTextTables();
        System.out.println(tables);
       
        // create instance of a text table
        XTextTable xTT = (XTextTable) UnoRuntime.queryInterface(XTextTable.class, xWriterComponent);;
       
        //récupération des nom de tous les tableaux présents dans le document
         String[] tableName = tables.getElementNames();
         //pour tous les tableaux du document ...
        for (int i = 0 ; i<tableName.length; i++)
        {
           System.out.println(tableName[i]);
           xTT = (XTextTable)UnoRuntime.queryInterface(XTextTable.class, tables.getByName(tableName[i]));
           XTextTableCursor xTTC = xTT.createCursorByCellName("A2");
           XText xCellA2Text = (XText)UnoRuntime.queryInterface(XText.class,xTT.getCellByName("A2"));
       
           //récupération de la phrase contenu dans la cellule A2
           String phraseA2 = xCellA2Text.getString();
           //si la phraseA2 se termine par la balise [VERT]...
           if (phraseA2.endsWith("[VERT]"))
           {
              //ajustement de la propriété verticale
              XPropertySet xTPS = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xTTC);
            xTPS.setPropertyValue("CharRotation", new Short(rotation));
              //réécriture de la phrase en vertical
              xCellA2Text.setString(phraseA2);
           }
        }


merci pour vos réponses
Milie

OOo2.0.2 - API UNO et DevelopersGuide
Windows 2000 et XP
mimi31110
NOOouvel adepte
NOOouvel adepte
 
Messages: 20
Inscrit le: 30 Mai 2006 10:14
Localisation: France (Toulouse)


Retour vers Macros et API

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Yahoo [Bot] et 0 invités