Ouvrir un fichier et son application

[Résolu]
Signaler
Messages postés
30
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
21 mars 2010
-
Messages postés
1
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
3 janvier 2008
-
Bonjour,
je souhaite ouvrir un fichier openOffice afin d'y insérer des valeurs de champs contenues dans mon application.
Cependant, pour ouvrir l'application il me suffit de faire :
try {
              Process p = null;
              Runtime r = Runtime.getRuntime();
              p = r.exec("C:\\Program Files\\OpenOffice.org 2.2\\program\\swriter.exe" );
              int x = p.waitFor();
 }
catch(Exception e) {
              e.printStackTrace();
}

Par contre comment peut-on ouvrir le fichier "document.ott"?

4 réponses

Messages postés
30
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
21 mars 2010

J'ai trouvé la solution à mes problèmes.

Liens utiles :
    http://api.openoffice.org/docs/DevelopersGuide/OfficeBean/OfficeBean.xhtml
    http://www.developpez.net/forums/archive/index.php/t-66777.html

Voici un exemple de comment accéder aux champs utilisateur d'un document openOffice :

/**
 * Cette classe permet de charger un document et de récupérer les champs utilisateur.
 * Elle modifie le contenu du champ nommé "exemple" par le texte "champ modifié".
 */
public class Exemple {
    
    /**
    * @param args
    */
    public static void main(String[] args) {
        // Chargement du document (en local : 127.0.0.1)

        String[] argsn = new String[] {
                "uno:socket,host=127.0.0.1,port=8100;urp;StarOffice.ServiceManager",
                "file:///C:/exemple.ott" };
        try {
            XComponentContext xcomponentcontext =
                com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null); // 1
            
            XMultiComponentFactory xmulticomponentfactory =    xcomponentcontext.getServiceManager(); // 2
            
            Object objectUrlResolver =
                xmulticomponentfactory.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",
                        xcomponentcontext); // 3
            
            XUnoUrlResolver xurlresolver =
                (XUnoUrlResolver)UnoRuntime.queryInterface(XUnoUrlResolver.class, objectUrlResolver); // 4
        
            Object objectInitial = xurlresolver.resolve(argsn[0]); // 5
                
            xmulticomponentfactory = (XMultiComponentFactory) UnoRuntime.queryInterface(
                    XMultiComponentFactory.class, objectInitial); // 6
            
            XPropertySet xpropertysetMultiComponentFactory = (XPropertySet) UnoRuntime.queryInterface(
                    XPropertySet.class, xmulticomponentfactory); // 7
            
            Object objectDefaultContext =
                xpropertysetMultiComponentFactory.getPropertyValue("DefaultContext"); // 8
            
            xcomponentcontext = (XComponentContext)UnoRuntime.queryInterface(
                    XComponentContext.class, objectDefaultContext); // 9
            
            Object xdesktop =
                xmulticomponentfactory.createInstanceWithContext("com.sun.star.frame.Desktop",
                        xcomponentcontext); // 10
            
            XComponentLoader xcomponentloader = (XComponentLoader) UnoRuntime.queryInterface(
                    XComponentLoader.class, xdesktop); // 11
            
            XComponent xcomp = xcomponentloader.loadComponentFromURL(
                    argsn[1], "_blank", 0, new PropertyValue[0]); // 12
            
            /* MAJ du champ nommé "exemple" */
            setUserFieldExemple(xcomp);
            
            System.exit(0);
        }
        catch(Exception exception) {
            System.err.println(exception);
        }
        catch(java.lang.Exception e) {
            e.printStackTrace();
        }
    }

    // Exemple de méthode pour modifier un champ
    public static void setUserFieldExemple(XComponent xcomp) {
        // getting the text document object
        XTextDocument textDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, xcomp);

        XTextFieldsSupplier xTextFieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, textDoc);
        XEnumerationAccess xEnumeratedFields = xTextFieldsSupplier.getTextFields();
        XNameAccess xNamedFieldMasters = xTextFieldsSupplier.getTextFieldMasters();
        String sName = "com.sun.star.text.FieldMaster.User." + "exemple";
                  
        // Accès au field master
        try {
            Object fieldMaster = xNamedFieldMasters.getByName(sName);
            // On récupère l'interface XPropertySet pour modifier le contenu du champ
            XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, fieldMaster);
            // Modification du contenu
            xPropertySet.setPropertyValue("Content", "champ modifié");
        }
        catch(NoSuchElementException ...
        
        // Il faut ensuite rafraichir la collection de champs texte
        XRefreshable xRefreshable = (XRefreshable) UnoRuntime.queryInterface(XRefreshable.class, xEnumeratedFields);
        xRefreshable.refresh();
    }
}

Cependant, il faut auparavant faire une mise a jour d'un fichier d'openOffice :

OpenOffice écoute sur le port 8100.
 * On spécifie cela dans le fichier OOoBasePath\share\registry\data\org\openoffice\Setup.xcu.
 * Il faut ajouter les lignes suivantes :
 *
 *
 * <value>socket,host=localhost,port=8100;urp;StarOffice.ServiceManager</value>
 *

 *
 * Juste après cette ligne-ci :
 *
 * <node oor:name="Office">
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
125
Salut,

Hum ton truc est loin d'être portable : si un gars là installer autre part que dans le Program Files du disque C:, ou s'il a linux, ca marche plus !
______________________________________
DarK Sidious
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,

utilise lapi java de openoffice et également fait un tour sur ce thread

http://www.developpez.net/forums/archive/index.php/t-66777.html

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
1
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
3 janvier 2008

bonjour,
Ceci fonctionne tres bien, mais il me reste toujours un probleme.
La string que je souhaiterais inserer est au format HTML:
xPropertySet.setPropertyValue("Content", "test");

Malheureusment, le HTML n'est pas interpreté dans le document OO.

Quelqu'un a eu ce probleme?