L'opération est simple, il suffit de mettre un nombre dans la cellule A1. J'essaye avec ** windows **.
En guise de préparation, lancez d'abord un nouveau calc.
Veuillez mettre le script python écrit ci-dessous à la place de votre propre macro.
def a1():
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.getSheets().getByName('Sheet1')
A1 = sheet.getCellRangeByName('A1')
A1.Value = 100
Exécutez Outils-> Macro-> Gérer les macros-> python-> Script applicable-> a1. Vers A1 Contient 100.
Comme il est difficile de déboguer avec des macros, nous allons permettre d'opérer en utilisant des scripts python de l'extérieur. Pour l'instant, Windows ne peut effectivement utiliser que le python fourni avec LibreOffice. La situation semble être la même sur Mac et Ubuntu. En d'autres termes, c'est assez gênant car vous ne pouvez pas ajouter de modules librement **.
** (Préparation) ** --python utilise la pièce jointe LibreOffice (n'est pas en conflit avec les autres pythons)
(Commencez) Commencez par une commande batch (veuillez la nommer librement) avec les options comme indiqué ci-dessous. Notez qu'il y a deux lignes. La fenêtre DOS reste ouverte. Il vaut mieux en faire un service, mais pour le moment, c'est la voie à suivre. Une fois lancé, ** cliquez une fois sur la feuille. ** La cause est inconnue, mais cela ne fonctionne que si vous cliquez dessus une fois.
"C:\Program Files (x86)\LibreOffice 5\program\soffice.exe" ^
--calc --norestore --accept=socket,host=localhost,port=8100;urp
Ce qui suit est identique à la macro. Puisqu'il est fourni avec libreoffice, uno est importé Tu devrais être capable de. On suppose qu'un nouveau calc est ouvert. accéder au document courant Ce qui suit est le même contenu que la macro. Avant cela, il y a encore des parties que je ne comprends pas. Exécutez avec le nom du script python (n'hésitez pas à le nommer).
# -*- coding: utf-8 -*-
import uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext)
#connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=8100;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
# access the current document ( calc )
doc = desktop.getCurrentComponent()
sheet = doc.getSheets().getByName('Sheet1')
A1 = sheet.getCellRangeByName('A1')
A1.Value = 999
Le développement est meilleur que les macros seules, car les macros et le monde extérieur peuvent désormais faire la même chose. Même s'il est externe, cela n'est pas pratique car vous ne pouvez pas utiliser pip ou ipython car vous devez utiliser la pièce jointe libreoffice (pour le moment).
Recommended Posts