Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- import sys
- import os
- from os.path import abspath, isfile, splitext
- import signal
- import time
- sys.path.append('/usr/lib64/libreoffice/program')
- import uno
- from com.sun.star.beans import PropertyValue
- def _toProperties(**args):
- props = []
- for key in args:
- prop = PropertyValue()
- prop.Name = key
- prop.Value = args[key]
- props.append(prop)
- return tuple(props)
- # start first
- # libreoffice --headless --accept="socket,host=0,port=8100,tcpNoDelay=1;urp"
- def conv(fi):
- print ("CONVERT %s" % fi)
- fo = fi.replace('.csv','.xlsx')
- if fi == fo:
- desktop.terminate()
- raise BaseException("OOPS [%s]" % fi)
- inputFile = uno.systemPathToFileUrl(abspath(fi))
- outputFile = uno.systemPathToFileUrl(abspath(fo))
- # load, calculateAll(), save
- document = desktop.loadComponentFromURL(inputFile, "_blank", 0, _toProperties(FilterName="scalc: Text - txt - csv (StarCalc)", FilterOptions="44,34,76,1"))
- document.calculateAll()
- # csv
- #document.storeToURL(outputFile, _toProperties(FilterName="Text - txt - csv (StarCalc)", FilterOptions="44,34,76,1"))
- #document.storeToURL(outputFile, _toProperties(FilterName="calc_MS_Excel_40"))
- document.storeToURL(outputFile, _toProperties(FilterName="Calc MS Excel 2007 XML"))
- cmd = "localc \"--accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager\" --nologo --headless --nofirststartwizard"
- pid = os.fork()
- if not pid:
- os.system(cmd)
- sys.exit(1)
- print ("FORKED pid=%d" % pid)
- time.sleep(5)
- # import the OpenOffice component context
- local = uno.getComponentContext()
- # access the UnoUrlResolver service - this will allow to connect to OpenOffice.org program
- resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)
- # load the context and you are now connected - you can access OpenOffice via its API mechanism
- context = resolver.resolve("uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager")
- remoteContext = context.getPropertyValue("DefaultContext")
- # service responsible for the current document called desktop
- desktop = context.createInstanceWithContext("com.sun.star.frame.Desktop", remoteContext)
- document = desktop.getCurrentComponent()
- for f in sys.argv[1:]:
- conv(f)
- desktop.terminate()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement