Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

win32com & Excel

8 réponses
Avatar
Bertrand
Bonjour,

Je voudrais savoir si il est possible d'ouvrir une feuille Excel par un
script python, de sélectionner des cellules, que celle sélection soit
renvoyée au script et qu'il fasse des traitements sur la sélection.

Merci !

8 réponses

Avatar
pdalet
Bonjour

OUI par echange de type DDE ou par COM.

Bientôt, j'aurai terminé sous openoffice un fichier d'installation de
macros en
python permettant de dialoguer avec la liaison série RS232c et scalc.


import sys
import win32ui
import win32api
import win32con
import dde
from dde import CreateServer

#MACROS
#[WORKBOOK.SELECT("FEUIL2")]
#[APP.ACTIVATE][ALERT("Hello from the sample Excel DDE driver")]
#[APP.ACTIVATE][QUIT]





server = dde.CreateServer()
server.Create('')
conversation = dde.CreateConversation(server)

conversation.ConnectTo('excel','system')
#conversation.ConnectTo('excel','[Classeur1]Feuil1')
if (conversation.Connected() == 0):
print "nnERROR: No connection possible."
conversation.Shutdown()
sys.exit() # end program

print "Connected with Excel"

conversation.Command('[NEW(1)]')
conversation.Command('[SAVE.AS("c:DDE_TEST.XLS",1,"",
FALSE,"",FALSE)]')
conversation.Shutdown()
print "OK"


Ph DALET
Lyp champollion
av pezet
46100.

Bertrand wrote:
Bonjour,

Je voudrais savoir si il est possible d'ouvrir une feuille Excel par un
script python, de sélectionner des cellules, que celle sélection soit
renvoyée au script et qu'il fasse des traitements sur la sélection.

Merci !


Avatar
Amaury Forgeot d'Arc
Bonjour,

Je voudrais savoir si il est possible d'ouvrir une feuille Excel par un
script python, de sélectionner des cellules, que celle sélection soit
renvoyée au script et qu'il fasse des traitements sur la sélection.

Merci !


Voici un exemple de code que j'ai trouvé quelque part sur le Net :
(j'en ai écrit d'autres, mais je ne suis pas sur la bonne machine)

import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = 1
k = self.excel.Workbooks.Add()
v = k.Worksheets(1)
v.Cells(1,1).Value = "Hello, World"

Les fonctions et objets disponibles sont très biens décrits... dans la
doc d'Excel. Il y a en particulier une propriété qui renvoie la partie
sélectionnée de la feuille courante (un truc du genre
excel.CurrentSelection)

Par contre, en relisant ta question, je lis "sélectionner des cellules".
Qui sélectionne ? Le script ou l'utilisateur ? Dans le second cas, ça
peut être plus compliqué. Je crois que l'on peut cliquer pendant que le
script tourne (ça peut d'ailleurs faire des trucs marrants). Il faudrait
de faire attendre le script jusqu'à ce que l'utilisateur ait sélectionné
la zone voulue. Tout le problème est maintenant dans le "jusqu'à"...

--
Amaury

Avatar
Bertrand
Merci pour ces réponses !

Voici le compoprtement que j'attend :

Le script ouvre un tableur excel avec plusieurs feuilles remplies de données
Je selectionne à la souris une zone colonnes/cellules
Je ferme le tableur (à préciser)
La selection que j'ai faite est récupérée par le script et un traitement
commence.

And voilà !

Bertrand




Bonjour,

Je voudrais savoir si il est possible d'ouvrir une feuille Excel par
un script python, de sélectionner des cellules, que celle sélection
soit renvoyée au script et qu'il fasse des traitements sur la sélection.

Merci !


Voici un exemple de code que j'ai trouvé quelque part sur le Net :
(j'en ai écrit d'autres, mais je ne suis pas sur la bonne machine)

import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = 1
k = self.excel.Workbooks.Add()
v = k.Worksheets(1)
v.Cells(1,1).Value = "Hello, World"

Les fonctions et objets disponibles sont très biens décrits... dans la
doc d'Excel. Il y a en particulier une propriété qui renvoie la partie
sélectionnée de la feuille courante (un truc du genre
excel.CurrentSelection)

Par contre, en relisant ta question, je lis "sélectionner des cellules".
Qui sélectionne ? Le script ou l'utilisateur ? Dans le second cas, ça
peut être plus compliqué. Je crois que l'on peut cliquer pendant que le
script tourne (ça peut d'ailleurs faire des trucs marrants). Il faudrait
de faire attendre le script jusqu'à ce que l'utilisateur ait sélectionné
la zone voulue. Tout le problème est maintenant dans le "jusqu'à"...




Avatar
Méta-MCI
Bonjour !


La propriété Selection.Value de l'objet 'Excel.Application' devrait
donner le résultat attendu.


@-salutations
--
Michel Claveau
Avatar
Bertrand
Mais alors à quel moment récupérer cette propriété ? A la fermeture du
fichier ?


Bonjour !


La propriété Selection.Value de l'objet 'Excel.Application' devrait
donner le résultat attendu.


@-salutations


Avatar
Michel Claveau
Bonsoir !

Dans un cas similaire, je récupère la sélection toutes les secondes,
jusqu'à ce qu'Excel soit fermé.

Autre genre d'utilisation, du même style : surveillance de Word. Dès
que le contenu contient le mot "PERL" (dès que l'utilisateur a tapé ce
mot, on le remplace, automatiquement, par "Python".

Si besoin, j'ai une classe toute prête, pour piloter Excel, depuis
Python, via COM/Ole-automation.

--
@-salutations

Michel Claveau
Avatar
Bertrand
Et on peut imaginer une macro excel qui renvoie la valeur de la selection ?
Mais on sort de python ...


Bonsoir !

Dans un cas similaire, je récupère la sélection toutes les secondes,
jusqu'à ce qu'Excel soit fermé.

Autre genre d'utilisation, du même style : surveillance de Word. Dès que
le contenu contient le mot "PERL" (dès que l'utilisateur a tapé ce mot,
on le remplace, automatiquement, par "Python".

Si besoin, j'ai une classe toute prête, pour piloter Excel, depuis
Python, via COM/Ole-automation.



Avatar
Méta-MCI
Bonsoir !

Et on peut imaginer une macro excel qui renvoie la valeur de la
selection ?




Oui, de plusieurs manières.

Par exemple, moi qui aime bien Python sous windows, j'ai un petit serveur,
qui se lance au démarrage, accessible de multiples façons, et qui peut
servir de "mémoire commune" entre de nombreuses applications.
Une macro Excel peut très bien y accéder via COM, pour y stocker des
données, ou pour exécuter des fonctions (autrement dit "comment ajouter des
fonctions Python à VBA").
Mais ce serveur est accessible par TCP/IP, par mmap, par le presse-papier,
par fichier, par e-mail, etc.


@-salutations

Michel Claveau