2009-09-01 3 views
1

Je travaille sur Java API qui interagit avec OpenOffice (swriter) via UNO. Pour TextTable, j'ai du mal à définir la propriété "OptimalWidth" de TableColumn.API OpenOffice - Option OptimalWidth pour table (toutes les colonnes)

J'ai essayé le code suivant et il semble que la méthode getColumns() ne puisse pas m'apporter à la propriété TableColumn et vous laisse seulement insérer et enlever des colonnes.

XTableColumns xColumns = xTextTable.getColumns(); 
XIndexAccess xIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
     XIndexAccess.class, xColumns); 

for (int i = 0; i < xIndexAccess.getCount(); i++) { 
    XPropertySet xColumnProps = (XPropertySet) UnoRuntime 
      .queryInterface(XPropertySet.class, 
        (Any) xIndexAccess.getByIndex(i)); 
    if (xColumnProps != null) { 
     xColumn.setPropertyValue("OptimalWidth", new Boolean(true)); 
    } 
} 

Quelqu'un peut-il m'aider ou me donner des conseils pour définir la propriété OptimalWidth pour une table? Merci beaucoup d'avance!

Répondre

2

Ce fut une odyssée de découvrir, mais j'ai finalement réussi à créer une fonction qui fait exactement cela:

private void optimizeTableColumnWidths(XTextTable table) 
throws Exception 
{ 
    XTextViewCursorSupplier cursorSupplier = (XTextViewCursorSupplier) 
      UnoRuntime.queryInterface(XTextViewCursorSupplier.class, 
        document.getCurrentController()); 
    XTextViewCursor viewCursor = cursorSupplier.getViewCursor(); 

    String cellName = "A1"; 
    XText cellText = (XText)UnoRuntime.queryInterface(
      XText.class, table.getCellByName(cellName)); 
    XTextCursor cursor = cellText.createTextCursor(); 

    viewCursor.gotoRange(cursor, false); 
    viewCursor.gotoEnd(true); 
    viewCursor.gotoEnd(true); 

    XController controller = document.getCurrentController(); 
    XFrame frame = controller.getFrame(); 
    XDispatchProvider dispatchProvider = (XDispatchProvider) 
     UnoRuntime.queryInterface(XDispatchProvider.class, frame); 

    String unoAction = ".uno:SetOptimalColumnWidth"; 
    String targetFrameName = ""; 
    int searchFlags = 0; 
    PropertyValue[] properties = new PropertyValue[0]; 

    dispatchHelper.executeDispatch(
      dispatchProvider, 
      unoAction, 
      targetFrameName, 
      searchFlags, 
      properties); 
} 

Il est important que le dispatchHelper vient du contexte OpenOffice, et non à partir du courant document. J'ai récupéré le dispatchHelper de cette manière:

XComponentContext context = Bootstrap.bootstrap(); 
    XMultiComponentFactory factory = 
     context.getServiceManager(); 
    Object dispatchHelperObject = factory.createInstanceWithContext(
     "com.sun.star.frame.DispatchHelper", ooContext); 
    this.dispatchHelper = (XDispatchHelper)UnoRuntime.queryInterface(
     XDispatchHelper.class, dispatchHelperObject); 
+0

Je n'ai pas eu l'occasion de confirmer votre réponse mais ça a l'air bien. Je vais accepter votre réponse basée sur la réponse de Miguel et la vérifier plus tard. Merci! –

Questions connexes