2016-10-21 8 views
0

Existe-t-il un moyen de vérifier si un signet est placé dans une cellule de table? Si oui, comment pourrais-je aussi obtenir les indices de la cellule (ligne et colonne)?Comment vérifier lorsqu'un signet est placé dans une cellule?

Pensé à utiliser quelque chose comme XTextViewCursor, mais je ne sais pas comment obtenir un curseur de cellule afin de comparer les positions des curseurs.

(solutions non-java également acceptable, je veux juste avoir l'idée)

Répondre

1

ancres Apparemment signet fonctionnent comme l'interface TextRange. Voir 7.1.2 Can I check the current selection for a TextTable or Cell dans le document macro d'Andrew Pitonyak.

L'exemple python suivant vérifie si l'ancre est située dans une cellule de tableau. Si c'est le cas, il obtient le nom de la cellule, à partir de laquelle nous pouvons déterminer la ligne et la colonne.

def is_bookmark_in_cell(): 
    doc = XSCRIPTCONTEXT.getDocument() 
    marks = doc.getBookmarks() 
    anchor = marks.getByName("MyMarkInCell").getAnchor() 
    cell = anchor.Cell 
    if cell: 
     cellName = cell.CellName 
    else: 
     # Bookmark is not in a cell. 

Dans mon test, le nom de cellule était B2. Pour les tables simples, B2 signifie simplement la deuxième ligne et la deuxième colonne. Cela peut être plus complexe avec des tables dont les lignes s'étendent sur plusieurs colonnes ou sur des colonnes couvrant plusieurs lignes.

+0

Merci beaucoup! – soon

0

Il y a une solution java, basée sur la réponse du @ JimK:

XTextRange bookmark = getBookmarkByName(bookmarkName); 
XPropertySet props = UnoRuntime.queryInterface(XPropertySet.class, bookmark); 
Object maybeCell = props.getValue("Cell"); 
XCell cell = UnoRuntime.queryInterface(XCell.class, maybeCell); 

Vous pouvez également extraire "TextTable" du props puis récupérer des propriétés du cell.