{"skill":{"slug":"pls-office-docs","displayName":"PLS Office Docs","summary":"Create, read, edit, and extract content from PDF, DOCX, XLSX, and PPTX documents for professional reports, presentations, and data exports.","description":"---\nname: office-docs\ndescription: 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.\n---\n\n# Office Docs - Professional Document Generation\n\nComprehensive skill for creating and manipulating office documents. Handles PDF, DOCX, XLSX, and PPTX formats.\n\n## Quick Reference\n\n| Format | Create | Read | Edit |\n|--------|--------|------|------|\n| PDF | `fpdf`, `reportlab` | `pdfplumber`, `pymupdf` | `pypdf` |\n| DOCX | `python-docx` | `python-docx` | `python-docx` |\n| XLSX | `openpyxl`, `pandas` | `openpyxl`, `pandas` | `openpyxl` |\n| PPTX | `python-pptx` | `python-pptx` | `python-pptx` |\n\n---\n\n## PDF Operations\n\n### Install\n\n```bash\npip install fpdf reportlab pdfplumber pymupdf pypdf\n```\n\n### Create PDF\n\n```python\nfrom fpdf import FPDF\n\npdf = FPDF()\npdf.add_page()\npdf.set_font(\"Helvetica\", size=12)\npdf.cell(0, 10, \"Hello World\", ln=True)\npdf.output(\"document.pdf\")\n```\n\n### Create PDF with Images\n\n```python\nfrom fpdf import FPDF\n\npdf = FPDF()\npdf.add_page()\npdf.image(\"photo.jpg\", x=10, y=10, w=100)\npdf.output(\"with_image.pdf\")\n```\n\n### Extract Text from PDF\n\n```python\nimport pdfplumber\n\nwith pdfplumber.open(\"document.pdf\") as pdf:\n    for page in pdf.pages:\n        print(page.extract_text())\n```\n\n### Merge PDFs\n\n```python\nfrom pypdf import PdfMerger\n\nmerger = PdfMerger()\nmerger.append(\"file1.pdf\")\nmerger.append(\"file2.pdf\")\nmerger.write(\"merged.pdf\")\nmerger.close()\n```\n\n### Split PDF\n\n```python\nfrom pypdf import PdfReader, PdfWriter\n\nreader = PdfReader(\"document.pdf\")\nwriter = PdfWriter()\n\nfor i in range(0, 5):  # First 5 pages\n    writer.add_page(reader.pages[i])\n\nwith open(\"split.pdf\", \"wb\") as f:\n    writer.write(f)\n```\n\n---\n\n## DOCX (Word) Operations\n\n### Install\n\n```bash\npip install python-docx\n```\n\n### Create Document\n\n```python\nfrom docx import Document\n\ndoc = Document()\ndoc.add_heading(\"Report Title\", level=0)\ndoc.add_paragraph(\"This is a paragraph.\")\ndoc.add_paragraph(\"Bold text\", style=\"Intense Quote\")\ndoc.save(\"report.docx\")\n```\n\n### Add Table\n\n```python\nfrom docx import Document\n\ndoc = Document()\ntable = doc.add_table(rows=3, cols=2)\ntable.style = \"Table Grid\"\n\n# Header row\nhdr_cells = table.rows[0].cells\nhdr_cells[0].text = \"Name\"\nhdr_cells[1].text = \"Value\"\n\n# Data rows\nrow = table.rows[1].cells\nrow[0].text = \"Revenue\"\nrow[1].text = \"$1,000,000\"\n\ndoc.save(\"table.docx\")\n```\n\n### Add Image\n\n```python\nfrom docx import Document\nfrom docx.shared import Inches\n\ndoc = Document()\ndoc.add_picture(\"chart.png\", width=Inches(5))\ndoc.save(\"with_image.docx\")\n```\n\n### Read Document\n\n```python\nfrom docx import Document\n\ndoc = Document(\"report.docx\")\nfor para in doc.paragraphs:\n    print(para.text)\n\nfor table in doc.tables:\n    for row in table.rows:\n        for cell in row.cells:\n            print(cell.text)\n```\n\n### Add Bullet List\n\n```python\nfrom docx import Document\n\ndoc = Document()\ndoc.add_paragraph(\"Items:\", style=\"List Bullet\")\ndoc.add_paragraph(\"First item\", style=\"List Bullet\")\ndoc.add_paragraph(\"Second item\", style=\"List Bullet\")\ndoc.save(\"bullets.docx\")\n```\n\n---\n\n## XLSX (Excel) Operations\n\n### Install\n\n```bash\npip install openpyxl pandas xlsxwriter\n```\n\n### Create Workbook\n\n```python\nfrom openpyxl import Workbook\n\nwb = Workbook()\nws = wb.active\nws.title = \"Sheet1\"\n\n# Headers\nws[\"A1\"] = \"Name\"\nws[\"B1\"] = \"Value\"\n\n# Data\nws[\"A2\"] = \"Revenue\"\nws[\"B2\"] = 1000000\n\n# Formula\nws[\"A3\"] = \"Total\"\nws[\"B3\"] = \"=SUM(B2:B2)\"\n\nwb.save(\"data.xlsx\")\n```\n\n### Create with Pandas\n\n```python\nimport pandas as pd\n\ndf = pd.DataFrame({\n    \"Name\": [\"Alice\", \"Bob\", \"Charlie\"],\n    \"Score\": [85, 92, 78]\n})\n\ndf.to_excel(\"scores.xlsx\", index=False)\n```\n\n### Add Charts\n\n```python\nfrom openpyxl import Workbook\nfrom openpyxl.chart import BarChart, Reference\n\nwb = Workbook()\nws = wb.active\n\n# Data\nws[\"A1\"] = \"Month\"\nws[\"B1\"] = \"Sales\"\ndata = [(\"Jan\", 100), (\"Feb\", 150), (\"Mar\", 200)]\nfor i, (month, sales) in enumerate(data, 2):\n    ws[f\"A{i}\"] = month\n    ws[f\"B{i}\"] = sales\n\n# Chart\nchart = BarChart()\nchart.add_data(Reference(ws, min_col=2, min_row=1, max_row=4))\nchart.set_categories(Reference(ws, min_col=1, min_row=2, max_row=4))\nchart.title = \"Monthly Sales\"\nws.add_chart(chart, \"D1\")\n\nwb.save(\"chart.xlsx\")\n```\n\n### Read Workbook\n\n```python\nfrom openpyxl import load_workbook\n\nwb = load_workbook(\"data.xlsx\")\nws = wb.active\n\nfor row in ws.iter_rows(values_only=True):\n    print(row)\n```\n\n### Format Cells\n\n```python\nfrom openpyxl.styles import Font, PatternFill, Alignment\nfrom openpyxl import Workbook\n\nwb = Workbook()\nws = wb.active\n\n# Bold header\nws[\"A1\"] = \"Header\"\nws[\"A1\"].font = Font(bold=True, size=14)\n\n# Background color\nws[\"A1\"].fill = PatternFill(start_color=\"4472C4\", fill_type=\"solid\")\nws[\"A1\"].font = Font(color=\"FFFFFF\", bold=True)\n\n# Center align\nws[\"A1\"].alignment = Alignment(horizontal=\"center\")\n\nwb.save(\"formatted.xlsx\")\n```\n\n---\n\n## PPTX (PowerPoint) Operations\n\n### Install\n\n```bash\npip install python-pptx\n```\n\n### Create Presentation\n\n```python\nfrom pptx import Presentation\nfrom pptx.util import Inches, Pt\n\nprs = Presentation()\n\n# Title slide\nslide_layout = prs.slide_layouts[0]\nslide = prs.slides.add_slide(slide_layout)\ntitle = slide.shapes.title\nsubtitle = slide.placeholders[1]\ntitle.text = \"Presentation Title\"\nsubtitle.text = \"Subtitle here\"\n\nprs.save(\"presentation.pptx\")\n```\n\n### Add Bullet Slide\n\n```python\nfrom pptx import Presentation\nfrom pptx.util import Inches\n\nprs = Presentation()\nslide_layout = prs.slide_layouts[1]  # Title and Content\nslide = prs.slides.add_slide(slide_layout)\n\ntitle = slide.shapes.title\ntitle.text = \"Key Points\"\n\nbody = slide.placeholders[1]\ntf = body.text_frame\ntf.text = \"First point\"\n\np = tf.add_paragraph()\np.text = \"Second point\"\np.level = 1  # Indent\n\nprs.save(\"bullets.pptx\")\n```\n\n### Add Image\n\n```python\nfrom pptx import Presentation\nfrom pptx.util import Inches\n\nprs = Presentation()\nslide_layout = prs.slide_layouts[5]  # Blank\nslide = prs.slides.add_slide(slide_layout)\n\nslide.shapes.add_picture(\"chart.png\", Inches(1), Inches(1), width=Inches(8))\n\nprs.save(\"with_image.pptx\")\n```\n\n### Add Table\n\n```python\nfrom pptx import Presentation\nfrom pptx.util import Inches\n\nprs = Presentation()\nslide_layout = prs.slide_layouts[5]  # Blank\nslide = prs.slides.add_slide(slide_layout)\n\nrows, cols = 4, 3\ntable = slide.shapes.add_table(rows, cols, Inches(1), Inches(1), Inches(8), Inches(3)).table\n\n# Set headers\ntable.cell(0, 0).text = \"Name\"\ntable.cell(0, 1).text = \"Q1\"\ntable.cell(0, 2).text = \"Q2\"\n\n# Set data\ntable.cell(1, 0).text = \"Alice\"\ntable.cell(1, 1).text = \"100\"\ntable.cell(1, 2).text = \"150\"\n\nprs.save(\"table.pptx\")\n```\n\n---\n\n## Common Workflows\n\n### Report Generation\n\n```python\nfrom docx import Document\nfrom docx.shared import Inches\n\ndoc = Document()\ndoc.add_heading(\"Monthly Report\", level=0)\ndoc.add_paragraph(\"Generated automatically by agent.\")\n\n# Add summary table\ntable = doc.add_table(rows=3, cols=2)\ntable.style = \"Table Grid\"\ntable.rows[0].cells[0].text = \"Metric\"\ntable.rows[0].cells[1].text = \"Value\"\ntable.rows[1].cells[0].text = \"Revenue\"\ntable.rows[1].cells[1].text = \"$1,000,000\"\ntable.rows[2].cells[0].text = \"Users\"\ntable.rows[2].cells[1].text = \"5,000\"\n\ndoc.save(\"report.docx\")\n```\n\n### Data Export to Excel\n\n```python\nimport pandas as pd\nfrom openpyxl.chart import BarChart, Reference\nfrom openpyxl import load_workbook\n\n# Create data\ndf = pd.DataFrame({\n    \"Date\": pd.date_range(\"2026-01-01\", periods=30),\n    \"Revenue\": [1000 + i * 50 for i in range(30)]\n})\n\n# Save with formatting\ndf.to_excel(\"daily_revenue.xlsx\", index=False)\n\n# Add chart\nwb = load_workbook(\"daily_revenue.xlsx\")\nws = wb.active\n\nchart = BarChart()\nchart.add_data(Reference(ws, min_col=2, min_row=1, max_row=31))\nchart.set_categories(Reference(ws, min_col=1, min_row=2, max_row=31))\nchart.title = \"Daily Revenue\"\nws.add_chart(chart, \"D1\")\n\nwb.save(\"daily_revenue.xlsx\")\n```\n\n### PDF Report with Charts\n\n```python\nfrom fpdf import FPDF\nimport matplotlib.pyplot as plt\n\n# Create chart image\nplt.figure(figsize=(10, 6))\nplt.bar([\"Jan\", \"Feb\", \"Mar\"], [100, 150, 200])\nplt.title(\"Monthly Sales\")\nplt.savefig(\"chart.png\")\nplt.close()\n\n# Create PDF\npdf = FPDF()\npdf.add_page()\npdf.set_font(\"Helvetica\", size=16)\npdf.cell(0, 10, \"Monthly Sales Report\", ln=True, align=\"C\")\npdf.image(\"chart.png\", x=10, y=30, w=190)\npdf.output(\"report.pdf\")\n```\n","topics":["Docs","Spreadsheets","Document","PDF"],"tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":2045,"installsAllTime":77,"installsCurrent":10,"stars":1,"versions":1},"createdAt":1771802000069,"updatedAt":1778491612653},"latestVersion":{"version":"1.0.0","createdAt":1771802000069,"changelog":"Initial release of office-docs: generate, read, and edit major office document formats (PDF, DOCX, XLSX, PPTX).\n\n- Generate PDFs (from text and images), merge and split PDFs, extract PDF text.\n- Create, read, and edit Word documents, including tables, images, and bullet lists.\n- Build and manipulate Excel files with formulas, charts, pandas integration, and cell formatting.\n- Create and edit PowerPoint presentations, including slides with tables, bullet points, and images.\n- Designed for professional report generation, data export, and presentation automation.","license":null},"metadata":null,"owner":{"handle":"mattvalenta","userId":"s179k8qhzy79dqqnxpx26ebbh1884053","displayName":"Matt Valenta","image":"https://avatars.githubusercontent.com/u/153394211?v=4"},"moderation":null}