使用 Python 和 odfdo 库在本地创建、解析和编辑 ODT(OpenDocument Text)文件,适用于用户要求创建、编辑、读取、更新、追加、检查...
ODT 文件管理器是一项面向实际任务的技能,主要用于本地 OTT 文档创建和编辑由 odfdo.. .;Library : odfdo v3.20+ ——积极维护,单端(lxml), 完整 OTF 支持.;
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
基于 odfdo 实现的本地 ODT 文档创建与编辑功能。
依赖库:odfdo v3.20+ — 活跃维护中,仅依赖单个包(lxml),完整支持 ODF 格式。
pip install odfdo
该技能为纯本地运行——无网络访问能力,且对 NextCloud 完全无感知。
如需配合 NextCloud 工作流,请搭配使用 nextcloud-aio-oc:
| 步骤 | 技能 |
|---|---|
| 在 NextCloud 中查找文件 | nextcloud-aio-oc → node scripts/nextcloud.js files search |
| 下载二进制 ODT 文件 | nextcloud-aio-oc → python3 scripts/files_binary.py download |
| 编辑 / 创建 ODT | odt-filemgr-oc → python3 scripts/odt_tool.py ... |
| 上传二进制 ODT 文件 | nextcloud-aio-oc → python3 scripts/files_binary.py upload |
脚本路径位于:~/.openclaw/skills/odt-filemgr-oc/scripts/
NC=~/.openclaw/skills/nextcloud-aio-oc/scripts
ODT=~/.openclaw/skills/odt-filemgr-oc/scripts
# 1. 下载
python3 $NC/files_binary.py download "/Documents/MyDoc.odt" /tmp/MyDoc.odt
# 2. 检查结构
python3 $ODT/odt_tool.py inspect /tmp/MyDoc.odt
# 3. 编辑内容
python3 $ODT/odt_tool.py append /tmp/MyDoc.odt --text "New Section" --heading 2
python3 $ODT/odt_tool.py append /tmp/MyDoc.odt --text "Section content here."
# 4. 上传回 NextCloud
python3 $NC/files_binary.py upload /tmp/MyDoc.odt "/Documents/MyDoc.odt"
# 1. 本地创建
python3 $ODT/odt_tool.py create /tmp/NewDoc.odt --title "Q1 Report"
# 2. 添加内容
python3 $ODT/odt_tool.py append /tmp/NewDoc.odt --text "Summary" --heading 2
python3 $ODT/odt_tool.py append /tmp/NewDoc.odt --text "Results were positive across all metrics."
# 3. 推送至 NextCloud
python3 $NC/files_binary.py upload /tmp/NewDoc.odt "/Documents/Q1 Report.odt"
python3 $ODT/odt_tool.py inspect myfile.odt
python3 $ODT/odt_tool.py to-text myfile.odt
python3 $ODT/odt_tool.py append myfile.odt --text "Added paragraph."
python3 $ODT/odt_tool.py replace myfile.odt --find "draft" --sub "final"
python3 $ODT/odt_tool.py set-meta myfile.odt --title "Final Report"
| 命令 | 说明 |
|---|---|
inspect |
显示元数据 + 段落 / 标题 / 表格结构 |
to-text |
按文档顺序提取全部文本内容 |
create |
创建空白 ODT(可选设置一级标题 H1) |
append |
追加标题(N=1–6)或段落 |
replace |
查找并替换文本 |
set-meta |
更新文档元数据 |
set-font |
统一设置所有样式层级的字体(默认样式 + 所有命名样式 / 内联样式的覆盖) |
set-outline |
切换标题编号模式(1.1.1 或无编号) |
merge-styles |
应用模板 ODT 中的所有样式 |
如需进行表格编辑、复杂样式调整或多步操作,可直接嵌入 Python 脚本:
from odfdo import Document, Header, Paragraph
doc = Document("/tmp/file.odt")
body = doc.body
# 按顺序读取全部内容
for child in body.children:
if isinstance(child, Header):
print(f"H{child.level}: {child.inner_text}")
elif isinstance(child, Paragraph) and child.inner_text.strip():
print(f"[{child.style}]: {child.inner_text}")
# 添加内容
body.append(Header(2, "New Section"))
body.append(Paragraph("Content here."))
# 表格编辑
table = body.get_table_by_name("MyTable")
table.set_value(0, 0, "Updated cell")
doc.save("/tmp/file.odt", pretty=True)
关于 odfdo 全量 API(表格、列表、文本跨度、样式、元数据等),请参阅 REFERENCE.md。
inspect 确认结构。/tmp/ 目录存放中间文件;上传完成后及时清理。merge-styles 加载已有模板,而非从零生成样式。set-font 和 set-outline 可安全应用于任意文档,无需依赖模板。| 错误 | 修复方法 |
|---|---|
ModuleNotFoundError: odfdo |
pip install odfdo |
zipfile.BadZipFile |
文件已损坏或并非合法 ODT —— 请重新下载 |
| 标题未正确显示为 H1 | 请使用 Header(1, "text"),而非 Paragraph("text", style="Heading 1") |
| Collabora 中字体仍显示为 Liberation | ODT 每条样式规则包含 6 项字体属性。旧实现仅设置其中 3 项(style:font-name-*)。Collabora 渲染时依赖 fo:font-family —— 当前版本已确保全部 6 项均被正确设置。请重新运行 set-font。 |
| 字体名称必须完全匹配 | LibreOffice/Collabora 的字体名称区分大小写:"Noto Sans" ≠ "noto sans" |
set-outline 修改未生效 |
部分文档通过段落样式覆盖了编号设置 —— 此时应改用 merge-styles 加载一个干净的模板 |
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.6万人学习
共89课时 | 133.1万人学习
共49课时 | 82万人学习