Files
chatrebot_aireply_plug/skills/file-process/SKILL.md
Claw e1fbd31c64 完整 AgentSkill:词库外部化 + 全部脚本/Skill 脱敏上传
- 高危词库从 process.py 抽到 config.toml [security] section
- process.py 改为 _get_high_risk_words() 动态加载(配置优先)
- 新增 15 个 QQ 操作脚本(已脱敏:QQ号/IP/Token → 占位符)
- 新增 8 个 SKILL.md(qq-messenger/management/resolver/napcat-extras 等)
- 新增 SKILL.md 入口(完整部署方案文档)
- 保留 SDK 框架(plugin_modules.py, file_store_api.py, package.py 等)
2026-05-04 16:23:59 +08:00

130 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 办公文件处理 Skill
处理用户发来的 Word (.docx)、Excel (.xlsx)、PowerPoint (.pptx)、PDF (.pdf) 等办公文件。
## 工作流程
```
收到用户文件请求
↓
从 files/ 目录找到文件(或先用 qq_get_file.py 下载)
↓
复制到 self-workplace/ 下处理(避免污染原文件)
↓
用 Python 脚本处理并输出结果
↓
将处理结果通过 qq_send_msg.py 或 qq_send_file.py 发送给用户
↓
删除 self-workplace/ 下的临时副本
```
## 环境
虚拟环境位置:`YOUR_WORKSPACE_PATH/self-workplace/.venv`
用 `.venv/bin/python3` 调用,或用 `source .venv/bin/activate` 激活后直接 `python3`。
已安装的包:
| 包 | 用途 | 支持格式 |
|---|---|---|
| python-docx | 读写 Word 文档 | .docx |
| python-pptx | 读写 PPT 演示文稿 | .pptx |
| openpyxl | 读写 Excel 工作簿 | .xlsx |
| PyMuPDF (fitz) | PDF 通用解析(文字/图片/元数据) | .pdf |
| pdfplumber | PDF 精确提取(表格友好) | .pdf |
| Pillow | 图片处理 | .jpg/.png |
## 使用方法
### 1. Word (.docx) — python-docx
```python
from docx import Document
doc = Document("self-workplace/文件名.docx")
# 读取所有段落
for para in doc.paragraphs:
print(f"[{para.style.name}] {para.text}")
# 读取表格
for table in doc.tables:
for row in table.rows:
print(" | ".join(cell.text for cell in row.cells))
# 修改后保存
# doc.save("self-workplace/输出.docx")
```
### 2. PowerPoint (.pptx) — python-pptx
```python
from pptx import Presentation
prs = Presentation("self-workplace/文件名.pptx")
for slide in prs.slides:
print(f"--- 幻灯片 {slide.slide_id} ---")
for shape in slide.shapes:
if shape.has_text_frame:
text = shape.text_frame.text.strip()
if text:
print(text)
if shape.has_table:
table = shape.table
for row in table.rows:
print(" | ".join(cell.text for cell in row.cells))
```
### 3. Excel (.xlsx) — openpyxl
```python
from openpyxl import load_workbook
wb = load_workbook("self-workplace/文件名.xlsx", data_only=True)
# 工作表列表
print("工作表:", wb.sheetnames)
# 读取第一个工作表
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(" | ".join(str(cell) if cell is not None else "" for cell in row))
```
### 4. PDF — PyMuPDF(通用提取)
```python
import fitz
doc = fitz.open("self-workplace/文件名.pdf")
print(f"共 {len(doc)} 页")
for page_num in range(len(doc)):
page = doc[page_num]
text = page.get_text()
print(f"--- 第 {page_num+1} 页 ---")
print(text)
```
### 5. PDF 表格 — pdfplumber(表格提取)
```python
import pdfplumber
with pdfplumber.open("self-workplace/文件名.pdf") as pdf:
for i, page in enumerate(pdf.pages):
tables = page.extract_tables()
for t_idx, table in enumerate(tables):
print(f"--- 第 {i+1} 页 表格 {t_idx+1} ---")
for row in table:
print(" | ".join(str(c) if c else "" for c in row))
```
## 注意事项
1. **复制到 self-workplace 处理**:先 cp 过去再处理,原始文件不动,处理完删临时副本
2. **处理完发送结果**:用 `qq_send_msg.py` 发文字摘要,或 `qq_send_file.py` 发生成的文档
3. **必须清理**:处理完成后删除 `self-workplace/` 下的副本,防止堆积
4. **编码问题**:Python 默认 utf-8,一般没问题。中文 .docx 如果有乱码可尝试 `encoding="utf-8"`