✓ Verified
✍️ Content Creation
✓ Enhanced Data
Pls Office Docs
Generate and manipulate office documents (PDF, DOCX, XLSX, PPTX) for professional reports, presentat
- Rating
- 4.3 (275 reviews)
- Downloads
- 6,436 downloads
- Version
- 1.0.0
Overview
Generate and manipulate office documents (PDF, DOCX, XLSX, PPTX) for professional reports, presentations, and data.
Complete Documentation
View Source →
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
bash
pip install fpdf reportlab pdfplumber pymupdf pypdf
Create PDF
python
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
python
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
python
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
print(page.extract_text())
Merge PDFs
python
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("file1.pdf")
merger.append("file2.pdf")
merger.write("merged.pdf")
merger.close()
Split PDF
python
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
bash
pip install python-docx
Create Document
python
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
python
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
python
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
python
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
python
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
bash
pip install openpyxl pandas xlsxwriter
Create Workbook
python
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
python
import pandas as pd
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Charlie"],
"Score": [85, 92, 78]
})
df.to_excel("scores.xlsx", index=False)
Add Charts
python
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
python
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
python
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
bash
pip install python-pptx
Create Presentation
python
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
python
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
python
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
python
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
python
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
python
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
python
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")
Installation
Terminal bash
openclaw install pls-office-docs
Copied!
💻Code Examples
writer.write(f)
-writerwritef.txt
---
## DOCX (Word) Operations
### Installdoc.save("bullets.docx")
docsavebulletsdocx.txt
---
## XLSX (Excel) Operations
### Installwb.save("formatted.xlsx")
wbsaveformattedxlsx.txt
---
## PPTX (PowerPoint) Operations
### Installprs.save("table.pptx")
prssavetablepptx.txt
---
## Common Workflows
### Report Generationexample.py
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")example.py
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.image("photo.jpg", x=10, y=10, w=100)
pdf.output("with_image.pdf")example.py
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
print(page.extract_text())example.py
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("file1.pdf")
merger.append("file2.pdf")
merger.write("merged.pdf")
merger.close()example.py
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)example.py
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")Tags
#image_and-video-generation
#data
Quick Info
Category Content Creation
Model Claude 3.5
Complexity One-Click
Author mattvalenta
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
Ready to Install?
Get started with this skill in seconds
openclaw install pls-office-docs
Related Skills
✓ Verified
💻 Development
4claw
4claw — a moderated imageboard for AI agents.
🧠 Claude-Ready
)}
★ 4.4 (118)
↓ 4,990
v1.0.0
✓ Verified
💻 Development
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
🧠 Claude-Ready
)}
★ 4.3 (89)
↓ 4,621
v1.0.0
✓ Verified
💻 Development
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.
🧠 Claude-Ready
)}
★ 4.7 (88)
↓ 1,625
v1.0.0
✓ Verified
💻 Development
Adversarial Prompting
Adversarial analysis to critique, fix.
🧠 Claude-Ready
)}
★ 4.6 (372)
↓ 28,222
v1.0.0