Greg Lindstrom wrote:
Hello,
I would like to create and manipulate Open Office documents using
Python. I have found then UNO Python page and odfpy modules which
seem to be exactly what I need. The odfpy manual is, to me, a
confusing list of objects and methods (it's an impressive list!), but
does not have much in the way of how to use them. For example, I can
open a spreadsheet and create new pages (there's a nice example near
the back of the manual) but I can't figure out how to open an existing
spreadsheet and list the names of the individual sheets ("tabs").
I have written an application that access Microsoft Excel and creates
reports for work, but would like to create an Open Source version
using Open Office and release it to the community (and maybe get a
talk at PyCon :-).
Is there someone here who can help me out, or is there an appropriate
mailing list for me to join?
Thanks
--greg
------------------------------------------------------------------------
--
http://mail.python.org/mailman/listinfo/python-list
Here's a snippet of code I use to open a spreadsheet (given as a file
path name), and compute and return the list of sheets it contains. It
connects to an existing OpenOffice if possible, otherwise it starts
OpenOffice and waits for it to accept a connection.
def OpenSS(path):
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
'com.sun.star.bridge.UnoUrlResolver', localContext )
resolveArg='uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext'
# Conect to running OO; First, starting OO if necessary;
try:
ctx = resolver.resolve(resolveArg)
except NoConnectException:
os.system("ooffice '-accept=socket,host=localhost,port=2002;urp;'&")
while 1:
print ' waiting for OpenOffice'
time.sleep(1)
try:
ctx = resolver.resolve(resolveArg)
break
except NoConnectException:
pass
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext(
'com.sun.star.frame.Desktop', ctx)
url = 'file://' + path
component = desktop.loadComponentFromURL(url, '_default', 0, ())
sheets = [component.getSheets().getByIndex(i)
for i in range(component.getSheets().getCount())]
return sheets
Hope this helps,
Gary Herro
--
http://mail.python.org/mailman/listinfo/python-list