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.
Comprehensive skill for creating and manipulating office documents. Handles PDF, DOCX, XLSX, and PPTX formats.
| 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 |
pip install fpdf reportlab pdfplumber pymupdf pypdf
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")
from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.image("photo.jpg", x=10, y=10, w=100)
pdf.output("with_image.pdf")
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
print(page.extract_text())
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("file1.pdf")
merger.append("file2.pdf")
merger.write("merged.pdf")
merger.close()
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)
pip install python-docx
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")
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")
from docx import Document
from docx.shared import Inches
doc = Document()
doc.add_picture("chart.png", width=Inches(5))
doc.save("with_image.docx")
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)
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")
pip install openpyxl pandas xlsxwriter
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")
import pandas as pd
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Charlie"],
"Score": [85, 92, 78]
})
df.to_excel("scores.xlsx", index=False)
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")
from openpyxl import load_workbook
wb = load_workbook("data.xlsx")
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(row)
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")
pip install python-pptx
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")
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")
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")小葱技能站7w4.net,专业的AI技能分享平台。
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")
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")
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")
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")
这个Skill质量中等偏上,能覆盖基础的办公文档生成需求,示例清晰易学。但内容偏简单,只有基础操作演示,遇到复杂排版、批量处理或多文档联动等场景时可能不够用。适合日常简单的文档处理任务,对专业级文档生成需求的用户来说功能深度有所欠缺。