开发者

Python, OpenOffice: Programmatically Manipulating spreadsheets

I have an spreadsheet-based automated report that needs to be created daily, with some charts, aggregating functions (e.g. SUM and AVERAGE) and formatted cells (Dates, percentage, etc.).

I have tried to write these results directly to an Excel file, but Python's xlwt and xlrd don'y support charts and functions.

Moreover, trying to open an existing, formatted Excel开发者_StackOverflow中文版 file and changing some cell's values ended up erasing all charts and functions in the existing file.

Is there a way to write charts and functions to an OpenOffice spreadsheet, or at least change cells in an existing spreadsheet without erasing data? If there is a Pythonic way to do it, I can easily convert the OO file into an Excel file and deliver it.


You can use PyUNO, a Python library to use UNO API.

Here is a Python example to do some manipulations in a Calc document.


Are you looking for this: http://ooopy.sourceforge.net/

Open Office.org API's accessible from Python?

Or this? http://api.openoffice.org/

The OpenOffice.org API Project?

This may be helpful, also: http://wiki.services.openoffice.org/wiki/Python


For creating spreadsheets easily: use odslib or for python3: odslib3 … even if the project was last updated over six years ago (2013-07-19) it worked straight out of the box and with just one example viewed. Download the package from the repository for the examples.

$ pip install odslib

and then a sample spreadsheet could be created like this:

#!/usr/bin/python

import sys
import odslib

doc = odslib.ODS()

def writeRow( doc, row, name, power, rating ):
    doc.content.getCell( 0, row).stringValue( name )
    doc.content.getCell( 1, row).stringValue( power )
    doc.content.getCell( 2, row).floatValue( rating )

# the column names
writeRow( doc, 0, "Name", "Power", "Rating" ) 

# some lines of content
writeRow( doc, 1, "Mr. Incredible", "Strength", 0.8 ) 
writeRow( doc, 2, "Elastigirl", "Elasticity", 0.9 ) 
writeRow( doc, 3, "Frozone", "Ice", 0.7 ) 
writeRow( doc, 4, "Syndrome", "n/a", 0.3 ) 
writeRow( doc, 5, "Jack-Jack", "All", 1.0 ) 

doc.save("supers.ods")
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜