19

我需要操作ODF文件格式(开放文档格式,开放办公室的内部格式),我需要用Python来做。

看起来 ODFPy 是一个很棒的库。不幸的是,官方文档很差,几乎没用。我在网上几乎找不到任何东西——也许它不那么受欢迎?

有没有人可以指出一些信息或更好的文档?

4

6 回答 6

14

不幸的是,文档很糟糕,生成的 Python 包装器在代码中记录得很糟糕,提供了许多参数列表看起来像 func(*args) 的函数。

参考手册实际上很有用,但不是在您刚开始时 - 它没有提供如何使用这些功能的任何上下文。我建议从教程和所有示例开始。尽管它们可能与您的用例无关,但它们将帮助您了解软件包的工作原理。在您习惯了包的结构方式之后,您通常可以通过将 API 文档与OpenDocument Essentials书中的信息相结合来理解文档。

(这种关系充其量是有些微弱的,但您通常可以从中直觉方法和属性值。例如,在使用电子表格时,书中方便的 office:value-type 数据列表提供了构建正确的必要常量TableCell(valuetype=...) 实例)

此外,在 OpenOffice 中制作小文档,然后检查 xml 并将其与 ODFPy 生成的 XML 进行比较,极大地帮助您调试可能出错的地方。

于 2010-02-02T11:26:47.370 回答
11

在http://mashupguide.net/1.0/html/ch17s04.xhtml有一个很好的 odfpy 用法示例

于 2013-10-25T06:59:24.427 回答
4

我在api-for-odfpy.odt中找到了更多文档(该网站在过去几年中进行了重组)。

于 2012-12-25T21:47:02.823 回答
2

它已经过时了,有点,但可以帮助某人。我发现只有一种使用 ODFPY 的方法:

  1. 生成您的 ODF 文档(即 f1.ods)
  2. 复制它并在 LibreOffice/OpenOffice 或其他(即 f2.odf)中编辑
  3. 将两个文件都更改为 f1.zip 和 f2.zip
  4. 提取两个文件。

主要格式和数据位于“content.xml”和“styles.xml”

  1. 比较两种格式
  2. 在 python 脚本中进行更改
  3. 迭代 1-7 直到你有足够的结果:D:D

这是一些日期时间格式的示例,我是这样做的:

from odf.opendocument import OpenDocumentSpreadsheet
from odf.style import Style, TableCellProperties
from odf.number import DateStyle, Text, Year, Month, Day, Hours, Minutes, Seconds
from odf.text import P
from odf.table import Table, TableRow, TableCell

# Generate document object
doc = OpenDocumentSpreadsheet()
table = Table(name="Exported data")
#create custom format in styles.xml
date_style = DateStyle(name="date-style1") #, language="lv", country="LV")
date_style.addElement(Year(style="long"))
date_style.addElement(Text(text=u"-"))
date_style.addElement(Month(style="long"))
date_style.addElement(Text(text=u"-"))
date_style.addElement(Day(style="long"))
date_style.addElement(Text(text=u" "))
date_style.addElement(Hours(style="long"))
date_style.addElement(Text(text=u":"))
date_style.addElement(Minutes(style="long"))
date_style.addElement(Text(text=u":"))
date_style.addElement(Seconds(style="long", decimalplaces="3"))
doc.styles.addElement(date_style)
#link to generated style from content.xml
ds = Style(name="ds1", datastylename="date-style1",parentstylename="Default", family="table-cell")
doc.automaticstyles.addElement(ds)

#create simple cell
tr = TableRow()
tc = TableCell(valuetype='string')
tc.addElement(P(text = "Date-Time"))
tr.addElement(tc)
table.addElement(tr)

#create cell with custom formatting
lineDT = #some date-time variable
tr = TableRow()
tc = TableCell(valuetype='date',datevalue = lineDT.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3],stylename=ds)
tc.addElement(P(text=lineDT.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]))
tr.addElement(tc)
table.addElement(tr)

#save ods
doc.spreadsheet.addElement(table)
doc.save("test.ods", True)

我已经更新了一些代码,因为以前的版本在 MS 产品上打开错误。

于 2015-02-18T06:31:49.697 回答
1

试试ezodf 他们也有文档

于 2012-09-26T07:19:17.137 回答
-1

好的,这里有一个快速帮助:

  1. 获取 odfpy 源代码:

    ~$ svn checkout https://svn.forge.osor.eu/svn/odfpy/trunk odfpy
    
  2. 安装它:

     ~$ cd odfpy
     ~/odfpy$ python setup.py install
    
  3. 生成文档:

    ~/odfpy$ epydoc --pdf odf
    

    我已经在这里上传了生成的文档。

  4. 运行这个简单的示例程序:

    from odf.opendocument import OpenDocumentText
    from odf.text import P    
    textdoc = OpenDocumentText()
    p = P(text="Hello World!")
    textdoc.text.addElement(p)
    textdoc.save("helloworld", True)
    
  5. 阅读示例并尝试理解所有内容:

    ~/odfpy$ emacs examples/*.py
    

希望有帮助!祝你好运!

于 2009-06-04T11:45:14.480 回答