【问题标题】:ODFPy documentation [closed]ODFPy 文档 [关闭]
【发布时间】:2010-10-31 06:06:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: python openoffice.org odf odfpy


    【解决方案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
      

      我已经上传了生成的文档here

    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
      

    希望对您有所帮助!祝你好运!

    【讨论】:

    • 这仍然是原始发布者(理所当然地)抱怨的官方文档。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 项目链接失效...
    • 修复了示例链接,但在线教程似乎不再存在(源代码下载中仍然提供了一些较差的文档)
    【解决方案3】:

    试试ezodf 他们还有一个doc

    【讨论】:

    • FWIW 看起来 ezopdf 不再开发了
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 不知道为什么我被否决了,问题要求“......一些信息或更好的文档?”,并且该链接提供了我发现与 odfpy 交互非常有用的信息。
      【解决方案6】:

      它有点过时了,但可以帮助某人。 我发现只有一种使用 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 产品上打开错误。

      【讨论】:

        猜你喜欢
        • 2020-07-12
        • 2022-12-17
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 2014-10-22
        相关资源
        最近更新 更多