2017-08-30 3 views
1

J'essaie de sélectionner des éléments par programmation à partir d'une liste. Sur VBA je ferai:XLwings sélectionnant l'élément sur ListBox

Sheet1.MyListBox.Selected(0) = True 

Ou pour désélectionner

Sheet1.MyListBox.Selected(0) = False 

Avec XLwings Je suis en mesure de vérifier facilement si un élément est sélectionné en faisant:

>> wb.Sheets(1).api.MyListBox.Selected(0) 
True 

Mais si je essayer d'attribuer une valeur Je reçois une erreur:

wb.Sheets(1).api.MyListBox.Selected(0) = True 
    File "<ipython-input-156-9ef416a5660f>", line 1 
    wb.Sheets(1).api.MyListBox.Selected(0) = True 
               ^
SyntaxError: can't assign to function call 

Espérons que quelqu'un puisse vous aider. PS: J'ai trouvé que si vous êtes en mode Design (sélectionné dans la barre d'outils Excel), même la première ligne ne fonctionnera pas sur Python pour une raison quelconque!

Répondre

0

Comment: What if ... the method was not implemented? ... use ListBox.Selected(0) = True and find it is impossible with xlwings

Il n'y a pas de ListBox.Selected(Int32) dans la bibliothèque actuelle. Par conséquent, je suppose qu'il doit être mis en œuvre dans xlwings pour être disponible.
En utilisant l'interface .api, vous ne pouviez utiliser que ce qui est fourni par la bibliothèque.


Question: select items programmatically from a listbox

wb.Sheets(1).api.MyListBox.SetSelected(0, True) 

ListBox.SetSelected Method (Int32, Boolean)

Selects or clears the selection for the specified item in a ListBox.
Parameters
index Type: System.Int32
The zero-based index of the item in a ListBox to select or clear the selection for.
value Type: System.Boolean
true to select the specified item; otherwise, false.

+0

Merci beaucoup! Cela a fait l'affaire. Et si pour une raison quelconque la méthode n'était pas implémentée? Je devrais alors utiliser 'ListBox.Selected (0) = True' et trouver qu'il est impossible avec xlwings ... – Yona

+0

On peut faire 'wb.Sheets (1) .api.MyListBox.Selected (0)' et obtenir ' Vrai ou Faux selon le statut de cet élément. Mais alors que sur VBA vous pouvez assigner une valeur en faisant 'MyListBox.Selected (0) = True', ce n'est pas possible en utilisant xlwings. Vous avez résolu le problème en utilisant une autre méthode (SetSelected) et c'est génial car je ne savais pas qu'il existait! Mon dernier commentaire était une question sur ce qu'il fallait faire si vous vous trouvez obligé d'utiliser 'wb.Sheets (1) .api.MyListBox.Selected (0) = True' (parce que SetSelected n'existe pas par exemple). – Yona

+0

@Yona: Pourquoi devriez-vous être _ ** forcé ** _? Le fait que '.Selected (0)' ** only ** existe dans VBA pourrait être _historical_ ou _future_, seule la MS sait pourquoi. – stovfl