Office Docs: 专业 PDF, Word, 和 Excel 自动化 - Openclaw Skills
作者:互联网
2026-03-30
什么是 Office Docs?
Office Docs 技能为 AI 智能体处理复杂的文档工作流提供了强大的接口。通过利用行业标准的 Python 库,它能够无缝生成高质量的商业报告、数据驱动的电子表格和动态演示文稿。该技能是连接原始数据与精美、可分发的办公格式之间差距的关键。
通过将此能力集成到您的 Openclaw Skills 库中,开发人员可以自动化重复性的行政任务,生成实时数据导出,并以编程方式编辑现有文档。无论您是需要合并 PDF、从 pandas DataFrame 构建 Excel 图表,还是构建多幻灯片的 PowerPoint 文稿,此技能都为专业级文档自动化提供了技术基础。
下载入口:https://github.com/openclaw/skills/tree/main/skills/mattvalenta/pls-office-docs
安装与下载
1. ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install pls-office-docs
2. 手动安装
将技能文件夹复制到以下位置之一
全局模式~/.openclaw/skills/
工作区
/skills/
优先级:工作区 > 本地 > 内置
3. 提示词安装
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 pls-office-docs。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
Install
Office Docs 应用场景
- 自动生成 PDF 和 DOCX 格式的每月财务报告。
- 将复杂数据集导出为带有嵌入公式和图表的格式化 Excel 电子表格。
- 以编程方式为经常性业务演示构建幻灯片文稿。
- 从 PDF 文档中提取文本和结构化数据以进行自动化分析。
- 将多个 PDF 报告合并为单个存档,或将大型文件拆分为特定部分。
- 根据具体的业务需求识别目标文件格式(PDF, DOCX, XLSX 或 PPTX)。
- 利用 python-docx(Word)或 openpyxl(Excel)等专业库初始化新文档或加载现有模板。
- 以编程方式插入包括标题、段落、表格、图像和数据可视化在内的内容。
- 应用专业样式,例如 Excel 中的单元格格式或 PowerPoint 中的幻灯片布局,以确保输出的一致性。
- 将生成的文件保存到本地目录,以便在 Openclaw Skills 工作流中进行分发或进一步处理。
Office Docs 配置指南
要启用完整的文档支持,请通过 pip 安装所需的依赖项:
# PDF 支持
pip install fpdf reportlab pdfplumber pymupdf pypdf
# Word 支持
pip install python-docx
# Excel 支持
pip install openpyxl pandas xlsxwriter
# PowerPoint 支持
pip install python-pptx
Office Docs 数据架构与分类体系
该技能管理具有特定元数据和结构特征的各种文件格式:
| 文档类型 | 扩展名 | 主要元数据 | 布局元素 |
|---|---|---|---|
| 便携式文档 | 作者, 标题 | 页面, 文本框, 图像 | |
| Word 文档 | .docx | 样式, 页眉 | 段落, 表格, 章节 |
| Excel 工作簿 | .xlsx | 工作表, 公式 | 单元格, 范围, 图表 |
| PowerPoint 文稿 | .pptx | 布局, 主题 | 幻灯片, 形状, 占位符 |
name: office-docs
description: Generate and manipulate office documents (PDF, DOCX, XLSX, PPTX) for professional reports, presentations, and data exports. Use when: (1) Creating PDFs from text/images, (2) Generating Word documents, (3) Creating Excel spreadsheets with formulas, (4) Building PowerPoint presentations, (5) Extracting content from office documents.
Office Docs - Professional Document Generation
Comprehensive skill for creating and manipulating office documents. Handles PDF, DOCX, XLSX, and PPTX formats.
Quick Reference
| Format | Create | Read | Edit |
|---|---|---|---|
fpdf, reportlab |
pdfplumber, pymupdf |
pypdf | |
| DOCX | python-docx |
python-docx |
python-docx |
| XLSX | openpyxl, pandas |
openpyxl, pandas |
openpyxl |
| PPTX | python-pptx |
python-pptx |
python-pptx |
PDF Operations
Install
pip install fpdf reportlab pdfplumber pymupdf pypdf
Create PDF
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font("Helvetica", size=12)
pdf.cell(0, 10, "Hello World", ln=True)
pdf.output("document.pdf")
Create PDF with Images
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.image("photo.jpg", x=10, y=10, w=100)
pdf.output("with_image.pdf")
Extract Text from PDF
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
print(page.extract_text())
Merge PDFs
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("file1.pdf")
merger.append("file2.pdf")
merger.write("merged.pdf")
merger.close()
Split PDF
from pypdf import PdfReader, PdfWriter
reader = PdfReader("document.pdf")
writer = PdfWriter()
for i in range(0, 5): # First 5 pages
writer.add_page(reader.pages[i])
with open("split.pdf", "wb") as f:
writer.write(f)
DOCX (Word) Operations
Install
pip install python-docx
Create Document
from docx import Document
doc = Document()
doc.add_heading("Report Title", level=0)
doc.add_paragraph("This is a paragraph.")
doc.add_paragraph("Bold text", style="Intense Quote")
doc.save("report.docx")
Add Table
from docx import Document
doc = Document()
table = doc.add_table(rows=3, cols=2)
table.style = "Table Grid"
# Header row
hdr_cells = table.rows[0].cells
hdr_cells[0].text = "Name"
hdr_cells[1].text = "Value"
# Data rows
row = table.rows[1].cells
row[0].text = "Revenue"
row[1].text = "$1,000,000"
doc.save("table.docx")
Add Image
from docx import Document
from docx.shared import Inches
doc = Document()
doc.add_picture("chart.png", width=Inches(5))
doc.save("with_image.docx")
Read Document
from docx import Document
doc = Document("report.docx")
for para in doc.paragraphs:
print(para.text)
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
print(cell.text)
Add Bullet List
from docx import Document
doc = Document()
doc.add_paragraph("Items:", style="List Bullet")
doc.add_paragraph("First item", style="List Bullet")
doc.add_paragraph("Second item", style="List Bullet")
doc.save("bullets.docx")
XLSX (Excel) Operations
Install
pip install openpyxl pandas xlsxwriter
Create Workbook
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "Sheet1"
# Headers
ws["A1"] = "Name"
ws["B1"] = "Value"
# Data
ws["A2"] = "Revenue"
ws["B2"] = 1000000
# Formula
ws["A3"] = "Total"
ws["B3"] = "=SUM(B2:B2)"
wb.save("data.xlsx")
Create with Pandas
import pandas as pd
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Charlie"],
"Score": [85, 92, 78]
})
df.to_excel("scores.xlsx", index=False)
Add Charts
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
wb = Workbook()
ws = wb.active
# Data
ws["A1"] = "Month"
ws["B1"] = "Sales"
data = [("Jan", 100), ("Feb", 150), ("Mar", 200)]
for i, (month, sales) in enumerate(data, 2):
ws[f"A{i}"] = month
ws[f"B{i}"] = sales
# Chart
chart = BarChart()
chart.add_data(Reference(ws, min_col=2, min_row=1, max_row=4))
chart.set_categories(Reference(ws, min_col=1, min_row=2, max_row=4))
chart.title = "Monthly Sales"
ws.add_chart(chart, "D1")
wb.save("chart.xlsx")
Read Workbook
from openpyxl import load_workbook
wb = load_workbook("data.xlsx")
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(row)
Format Cells
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# Bold header
ws["A1"] = "Header"
ws["A1"].font = Font(bold=True, size=14)
# Background color
ws["A1"].fill = PatternFill(start_color="4472C4", fill_type="solid")
ws["A1"].font = Font(color="FFFFFF", bold=True)
# Center align
ws["A1"].alignment = Alignment(horizontal="center")
wb.save("formatted.xlsx")
PPTX (PowerPoint) Operations
Install
pip install python-pptx
Create Presentation
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
# Title slide
slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Presentation Title"
subtitle.text = "Subtitle here"
prs.save("presentation.pptx")
Add Bullet Slide
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
slide_layout = prs.slide_layouts[1] # Title and Content
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
title.text = "Key Points"
body = slide.placeholders[1]
tf = body.text_frame
tf.text = "First point"
p = tf.add_paragraph()
p.text = "Second point"
p.level = 1 # Indent
prs.save("bullets.pptx")
Add Image
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
slide_layout = prs.slide_layouts[5] # Blank
slide = prs.slides.add_slide(slide_layout)
slide.shapes.add_picture("chart.png", Inches(1), Inches(1), width=Inches(8))
prs.save("with_image.pptx")
Add Table
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
slide_layout = prs.slide_layouts[5] # Blank
slide = prs.slides.add_slide(slide_layout)
rows, cols = 4, 3
table = slide.shapes.add_table(rows, cols, Inches(1), Inches(1), Inches(8), Inches(3)).table
# Set headers
table.cell(0, 0).text = "Name"
table.cell(0, 1).text = "Q1"
table.cell(0, 2).text = "Q2"
# Set data
table.cell(1, 0).text = "Alice"
table.cell(1, 1).text = "100"
table.cell(1, 2).text = "150"
prs.save("table.pptx")
Common Workflows
Report Generation
from docx import Document
from docx.shared import Inches
doc = Document()
doc.add_heading("Monthly Report", level=0)
doc.add_paragraph("Generated automatically by agent.")
# Add summary table
table = doc.add_table(rows=3, cols=2)
table.style = "Table Grid"
table.rows[0].cells[0].text = "Metric"
table.rows[0].cells[1].text = "Value"
table.rows[1].cells[0].text = "Revenue"
table.rows[1].cells[1].text = "$1,000,000"
table.rows[2].cells[0].text = "Users"
table.rows[2].cells[1].text = "5,000"
doc.save("report.docx")
Data Export to Excel
import pandas as pd
from openpyxl.chart import BarChart, Reference
from openpyxl import load_workbook
# Create data
df = pd.DataFrame({
"Date": pd.date_range("2026-01-01", periods=30),
"Revenue": [1000 + i * 50 for i in range(30)]
})
# Save with formatting
df.to_excel("daily_revenue.xlsx", index=False)
# Add chart
wb = load_workbook("daily_revenue.xlsx")
ws = wb.active
chart = BarChart()
chart.add_data(Reference(ws, min_col=2, min_row=1, max_row=31))
chart.set_categories(Reference(ws, min_col=1, min_row=2, max_row=31))
chart.title = "Daily Revenue"
ws.add_chart(chart, "D1")
wb.save("daily_revenue.xlsx")
PDF Report with Charts
from fpdf import FPDF
import matplotlib.pyplot as plt
# Create chart image
plt.figure(figsize=(10, 6))
plt.bar(["Jan", "Feb", "Mar"], [100, 150, 200])
plt.title("Monthly Sales")
plt.savefig("chart.png")
plt.close()
# Create PDF
pdf = FPDF()
pdf.add_page()
pdf.set_font("Helvetica", size=16)
pdf.cell(0, 10, "Monthly Sales Report", ln=True, align="C")
pdf.image("chart.png", x=10, y=30, w=190)
pdf.output("report.pdf")
相关推荐
