name: office-toolkit description: "處理 Office 文件(Word/Excel/PPT/PDF)的技能。當用戶要求讀取、建立、編輯 Word 文件(.docx)、Excel 表格(.xlsx/.csv)、PPT(.pptx)或 PDF 時使用。基於 python-docx、openpyxl、python-pptx、pypdf 庫。Requires: python-docx, openpyxl, python-pptx, pypdf, pandoc, LibreOffice(驗證用)。" metadata: {"openclaw":{"emoji":"📄","requires":{"anyBins":[]}}}
處理 Office 文件:Word(.docx)、Excel(.xlsx/.csv)、PPT(.pptx)、PDF。
pip install --break-system-packages python-docx openpyxl python-pptx pypdf
sudo apt install libreoffice-writer libreoffice-calc libreoffice-impress pandoc
| 任務 | 庫/命令 |
|---|---|
| 讀 Word | python-docx 或 pandoc -t markdown |
| 建立/編輯 Word | python-docx |
| 讀 Excel | openpyxl 或 pandas |
| 建立/編輯 Excel | openpyxl |
| 讀 PPT | python-pptx |
| 建立/編輯 PPT | python-pptx |
| 讀 PDF | pypdf 或 pandoc |
| PDF 格式驗證 | LibreOffice soffice |
| PDF 轉圖片 | pdftoppm (poppler-utils) |
from docx import Document
doc = Document('file.docx')
for para in doc.paragraphs:
print(para.text)
# 帶格式提取
import subprocess
result = subprocess.run(['pandoc', '--track-changes=all', 'file.docx', '-t', 'markdown'],
capture_output=True, text=True)
print(result.stdout)
from docx import Document
from docx.shared import Pt, Inches
doc = Document()
# 標題
doc.add_heading('文件標題', 0)
# 段落
p = doc.add_paragraph('正文內容')
p.runs[0].bold = True # 加粗
p.runs[0].font.size = Pt(12)
p.runs[0].font.name = 'Arial'
# 引用
doc.add_paragraph('引用內容', style='Intense Quote')
# 表格
table = doc.add_table(rows=2, cols=3)
table.style = 'Light Grid Accent 1'
table.rows[0].cells[0].text = '表頭1'
table.rows[0].cells[1].text = '表頭2'
doc.save('output.docx')
import openpyxl
wb = openpyxl.load_workbook('file.xlsx')
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(row)
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
wb = openpyxl.Workbook()
ws = wb.active
ws.title = '資料'
# 寫入
ws['A1'] = '姓名'
ws['B1'] = '年齡'
ws['A2'] = '張三'
ws['B2'] = 25
# 格式化
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
ws['A1'].fill = header_fill
ws['A1'].font = Font(color='FFFFFF', bold=True)
ws['A1'].alignment = Alignment(horizontal='center')
# 儲存
wb.save('output.xlsx')
from pptx import Presentation prs = Presentation('file.pptx') for slide in prs.slides: for shape in slide.shapes: if hasattr(shape, 'text'): print(shape.text)發現更多技能外掛,請訪問7w4.net。
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
prs.slide_width = Inches(10)
prs.slide_height = Inches(7.5)
# 使用空白布局
slide = prs.slides.add_slide(prs.slide_layouts[6])
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = '演示標題'
subtitle.text = '副標題'
prs.save('output.pptx')
from pypdf import PdfReader
reader = PdfReader('file.pdf')
print(f'頁數: {len(reader.pages)}')
for page in reader.pages:
print(page.extract_text())
from pypdf import PdfWriter, PdfReader
writer = PdfWriter()
for pdf_file in ['doc1.pdf', 'doc2.pdf']:
reader = PdfReader(pdf_file)
for page in reader.pages:
writer.add_page(page)
with open('merged.pdf', 'wb') as f:
writer.write(f)
reader = PdfReader('input.pdf')
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
with open(f'page_{i+1}.pdf', 'wb') as f:
writer.write(f)
page = reader.pages[0]
page.rotate(90) # 順時針90度
| 依賴 | 狀態 |
|---|---|
| python-docx | ✅ 已安裝 |
| openpyxl | ✅ 已安裝 |
| python-pptx | ✅ 已安裝 |
| pypdf | ✅ 已安裝 |
| pandoc | ✅ 已安裝 |
| LibreOffice | ✅ 已安裝 |
pypdf,文字提取效果差時用 pandocsoffice 或 libreoffice(已安裝)pathlib.Path(path).exists()這個 Skill 質量中等偏上,能處理常見的 Word、Excel、PPT、PDF 文件操作。優點是功能齊全、程式碼示例實用、環境配置清晰;不足是複雜場景覆蓋不足,缺少錯誤處理說明。日常簡單文件處理夠用,但遇到特殊格式或批次操作可能需要補充能力。