Avrei trovato anche un altro sistema che per me potrebbe essere più indicato in quanto rinomino il pacchetto oxt ad ogni rilascio con il timestamp, ottenendo, perciò, ogni volta un diverso percorso dell'estensione.
Si tratterebbe di avviare lo script Python tramite Basic:
Codice: Seleziona tutto
Function LeenO_Path
Dim pip As Object, extensionLocation As String
Const extensionIdentifier = "org.giuseppe-vizziello.leeno"
' Const extensionIdentifier = "put the identifier value from the description.xml here"
pip = GetDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
extensionLocation = pip.getPackageLocation(extensionIdentifier)
' display a human readable address
' MsgBox(ConvertFromURL(extensionLocation)
sURL = (ConvertFromURL(extensionLocation))
LeenO_Path = FileNameoutofPath(sURL)
' Print sName
End Function
rem ----------------------------------------------------------------------
Sub Mainpy
Dim MasterScriptProviderFactory as Object
Dim MasterScriptProvider as Object
Dim Script as Object
Dim Url as String
Dim PythonResult as String
If NOT GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) Then
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
End If
sName = LeenO_Path
' Print sName
Url = "vnd.sun.star.script:" & sName & "|pyleeno.py$xmlsix2ods?language=Python&location=share:uno_packages"
' "vnd.sun.star.script:yokogawa.py$YokoCalcPython?language=Python&location=share"
' vnd.sun.star.script:myModule.py$myFunction?language=Python&location=user
' vnd.sun.star.script:myModule.py$myFunction?language=Python&location=share
' vnd.sun.star.script:myModule.py$myFunction?language=Python&location=document
MasterScriptProviderFactory = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
MasterScriptProvider = MasterScriptProviderFactory.createScriptProvider("")
Script = MasterScriptProvider.getScript(Url)
PythonResult = Script.invoke(Array(),Array(),Array())
MsgBox PythonResult
End Sub
Ottengo quanto in allegato.
Per completezza metto qui anche il codice di pyleeno.py
Codice: Seleziona tutto
#!/usr/bin/env python -c
# -*- coding: utf-8 -*-
########################################################################
import os, sys
# cos'e' il namespace:
# http://www.html.it/articoli/il-misterioso-mondo-dei-namespaces-1/
import xml.etree.ElementTree as etree
xmL = 'W:/_dwg/ULTIMUSFREE/elenchi/Bolzano/altri_formati/HBED13.six.xml'# file da convertire
#xmL = '/media/giuserpe/PRIVATO/_dwg/ULTIMUSFREE/elenchi/Bolzano/altri_formati/HBED13.six.xml'
# fixtag serve per risalire al dict che contiene il namespace del file XML-six
def fixtag(ns, tag, nsmap):
return '{' + nsmap[ns] + '}' + tag
########################################################################
def xmlsix2ods ():
"""
Modulo per la conversione dei prezzari dal formato XML-six a LeenO
(c) Giuseppe Vizziello 2015
"""
nsmap = {}
listaUM = []
listaprzDes = []
listaPRO = []
for event, elem in etree.iterparse(xmL, events=('end', 'start-ns')):
if event == 'start-ns':
ns, url = elem
nsmap[ns] = url
if event == 'end':
if elem.tag == fixtag('', 'prezzario', nsmap):
prezzarioId = elem.get('prezzarioId')
przId = elem.get('przId')
prdStruttura = elem.get('prdStruttura')
categoriaPrezzario = elem.get('categoriaPrezzario')
arrotondamento = elem.get('arrotondamento')
arrotondamentoImporto = elem.get('arrotondamentoImporto')
arrotondamentoPercentuale = elem.get('arrotondamentoPercentuale')
elif elem.tag == fixtag('', 'unitaDiMisura', nsmap):
listaUM.append(elem)
elif elem.tag == fixtag('', 'przDescrizione', nsmap):# titolo del prezzario
listaprzDes.append(elem)
elif elem.tag == fixtag('', 'prodotto', nsmap):
listaPRO.append(elem)
#lista delle unita' di misura
listaUMis = dict()
#unitaDiMisura:
for elem in listaUM:
listaUMis[elem.get('unitaDiMisuraId')] = elem.getchildren()[1].get('breve')# in italiano
########################################################################
#Formazione della lista dei prezzi
#prodotto:
listaPrz =[]
prezzo =[]
for elem in listaPRO:
desc = elem.getchildren()[1].get('estesa')
if desc == None:
desc = elem.getchildren()[1].get('breve')
um = dict(elem.items()).get('unitaDiMisuraId')
prezzo = (elem.get('prdId'), desc)
if um != None:
prezzo = (elem.get('prdId'), desc, listaUMis[um])
if len(elem.getchildren()) == 3:
valore = dict(elem.getchildren()[2].items())['valore']
prezzo = (elem.get('prdId'), desc, listaUMis[um], valore)
listaPrz.append(prezzo)
przDes_breve = dict(listaprzDes[1].items())['breve']
for elem in listaPrz:
print(elem[1] + '\n')
print ('mio')
g_exportedScripts = xmlsix2ods,
########################################################################
#import pdb; pdb.set_trace() #debugger
Script python che da shell non fa una piega.