2009-10-17 10 views
2

Discussion on OOoForum.orgComment créer un XTextTable dans OpenOffice.org uno en utilisant C#?

en python, en utilisant pyuno, je peux le faire comme ceci:

table = self.model.createInstance("com.sun.star.text.TextTable") 

Cela ne semble pas fonctionner en C#. Voici mon code de test (je me rends compte que je ne ai pas besoin probablement toutes ces déclarations à l'aide, mais je suis adaptais quelqu'un d'autre code):

using System; 
using unoidl.com.sun.star.lang; 
using unoidl.com.sun.star.uno; 
using unoidl.com.sun.star.bridge; 
using unoidl.com.sun.star.frame; 
using unoidl.com.sun.star.document; 
using unoidl.com.sun.star.text; 
using unoidl.com.sun.star.container; 
using unoidl.com.sun.star.util; 
using unoidl.com.sun.star.table; 
using unoidl.com.sun.star.beans; 

namespace FromScratch 
{ 
    class MainClass 
    { 
     public static void Main(string[] args) 
     { 
      XComponentContext componentContext = 
       uno.util.Bootstrap.bootstrap(); 
      XMultiServiceFactory multiServiceFactory = (XMultiServiceFactory) 
       componentContext.getServiceManager(); 
      XTextDocument document; 
      XComponentLoader loader = (XComponentLoader) 
       multiServiceFactory.createInstance 
        ("com.sun.star.frame.Desktop"); 
      document = (XTextDocument) loader.loadComponentFromURL 
       ("private:factory/swriter", "_blank", 0, 
       new PropertyValue[0]); 

      XText text = document.getText(); 
      XTextCursor cursor = text.createTextCursor(); 

      XTextTable table = (XTextTable) 
       multiServiceFactory.createInstance 
        ("com.sun.star.text.TextTable"); 
      table.initialize(2, 2); 
      text.insertTextContent(cursor, table, false); 

     } 
    } 
} 

La majeure partie semble fonctionner très bien, mais quand il arrive à cette ligne :

table.initialize(2, 2); 

Je reçois une erreur d'exécution:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object 
    at FromScratch.MainClass.Main (System.String[] args) [0x00063] in /home/matthew/Desktop/OpenOfficeSample/FromScratch/Main.cs:37 

Apparemment, cette ligne:

XTextTable table = (XTextTable) 
    multiServiceFactory.createInstance 
    ("com.sun.star.text.TextTable"); 

ne définit pas réellement la table à quoi que ce soit.

Que se passe-t-il ici?

Répondre

2

Solution (de OOoForum.org):

Vous devez obtenir la table de texte du document usine multiservice, pas de l'usine multiservice du gestionnaire de services. Vous pouvez le faire en transtypant votre document (un modèle) en XMultiServiceFactory et en appelant sa méthode createInstance.

XTextTable table = (XTextTable) 
    ((XMultiServiceFactory)document).createInstance 
    ("com.sun.star.text.TextTable"); 

Voir DevGuide.

Questions connexes