name: smartdoc
version: "1.0.0"
description: 全能文件處理專家——建立、編輯、轉換和分析 xlsx/docx/pdf/pptx/csv/md 等格式,純本地 Python,零 API Key。覆蓋 Excel 公式圖表、Word 中文排版模板、PDF 合併拆分水印加密、PPT 演示、Markdown 格式轉換、資料分析報告、批次處理。觸發詞:文件 Excel Word PDF PPT 表格 報告 轉換 合併 提取 排版 批次 xlsx docx pptx csv watermark encrypt chart formula template office
SmartDoc 智慧文件大師 📄
全能文件處理專家。一個 Skill 覆蓋 Excel、Word、PDF、PPT、Markdown、CSV——建立、編輯、轉換、分析,純本地 Python,零 API Key。
Quick Reference
| 使用者意圖 |
操作 |
引擎 |
| 建立/編輯 Excel |
公式、樣式、圖表、資料驗證、條件格式 |
openpyxl + pandas |
| 建立/編輯 Word |
中文排版、模板填充、頁首頁尾、目錄 |
python-docx |
| 讀取 PDF |
提取文本、表格 |
PyMuPDF + pdfplumber |
| 合併/拆分 PDF |
多檔案合併、按頁拆分 |
PyMuPDF |
| PDF 水印/加密 |
新增水印、密碼保護 |
PyMuPDF + pypdf |
| 建立/編輯 PPT |
幻燈片、圖表、中文排版 |
python-pptx |
| 格式互轉 |
MD↔Word↔PDF↔Excel↔CSV |
見轉換矩陣 |
| 資料分析報告 |
資料→圖表→多格式報告 |
pandas + openpyxl + python-docx |
| 批次處理 |
批次轉換、水印、提取 |
自動分塊 |
何時使用
當以下任意條件滿足時啟用本技能:
- 使用者要求建立、編輯或格式化 Office 文件(Excel / Word / PPT)
- 使用者要求讀取、合併、拆分 PDF 檔案
- 使用者要求在文件格式之間轉換(如 Markdown 轉 Word)
- 使用者要求從文件提取資料、文本或表格
- 使用者要求批次處理多個文件
7w4.net提供免費和付費技能下載。
- 使用者要求根據資料生成分析報告
- 使用者要求對文件新增水印、加密或解密
- 使用者提到中文文件排版最佳化
- 使用者使用關鍵詞:文件、表格、報告、PPT、PDF、xlsx、docx、轉換、合併、提取、排版
核心原則
🔒 安全紅線(絕不違反)
- 永不覆蓋原檔案 — 輸出到新路徑(新增
_output 字尾),除非使用者明確要求覆蓋
- 不執行宏/VBA — 跳過所有嵌入指令碼
- 純本地處理 — 不聯網、不上傳、不傳送任何資料到外部服務
- 不暴力破解 — 遇到加密 PDF 僅提示需要密碼
🎯 質量底線
- 資料完整性 — 長數字/身份證號/手機號必須存為文本(Excel 靜默截斷超過 15 位的數字)
- 格式保真 — 編輯現有文件時保留原有模板、樣式、合併單元格、列印設定,除非明確要求修改
- 中文優先 — 中英文間自動加空格,中文字型同時設定
font.name 和 rFonts.set(qn('w:eastAsia'), ...)
- 公式安全 — 複製/編輯公式後必須驗證引用範圍,交付前零公式錯誤
📗 Excel 處理
引擎選擇:
| 任務型別 |
引擎 |
原因 |
| 公式、樣式、圖表、資料驗證 |
openpyxl |
支援單元格級格式控制 |
| 資料分析、清洗、重塑 |
pandas |
DataFrame 操作更高效 |
| 大檔案(>50MB) |
openpyxl read_only/write_only |
防止記憶體溢位 |
關鍵規則
| 規則 |
錯誤寫法 |
正確寫法 |
| 長數字存為文本 |
pd.read_excel('f.xlsx') |
pd.read_excel('f.xlsx', dtype={'身份證號': str}) |
| 合併單元格取值 |
ws['B2'].value |
先查 ws.merged_cells.ranges,對映到左上角 |
| 公式引用驗證 |
複製 =SUM(A1:A10) 到 B 列 |
檢查是否應變為 =SUM(B1:B10),避免靜默偏移 |
| 日期序列號 |
直接當日期處理 |
注意 1900 閏日 bug,部分工作簿用 1904 系統 |
| 資料驗證下拉 |
手動寫入選項 |
用 DataValidation(type="list", formula1='"選項1,選項2"') |
| 條件格式進度條 |
手動設定顏色 |
用 DataBarRule(start_type='num', start_value=0, end_type='num', end_value=1) |
交付前檢查清單
- [ ] 長數字列(身份證/手機/訂單號)已設為文本格式
- [ ] 公式無
#REF!、#DIV/0!、#VALUE!、#NAME?、迴圈引用
- [ ] 表頭有樣式(加粗、背景色、居中),列寬自適應
- [ ] 原有模板、命名範圍、列印設定未被破壞
Before / After:長數字精度丟失
❌ 錯誤:預設讀取,身份證號變成科學計數法
df = pd.read_excel('users.xlsx')
→ 身份證 110101199001011234 變成 1.1010119900101e+17(後 3 位丟失)
✅ 正確:指定 dtype 為 str
df = pd.read_excel('users.xlsx', dtype={'身份證號': str, '手機號': str})
→ 身份證完整保留:110101199001011234
📘 Word 處理
引擎: python-docx
關鍵規則
| 規則 |
說明 |
| 中文字型必須雙設定 |
font.name = '微軟雅黑' 且 rFonts.set(qn('w:eastAsia'), '微軟雅黑'),缺一不可 |
| 公文邊距預設值 |
上 3.7cm、下 3.5cm、左 2.8cm、右 2.6cm |
| 圖片寬度 |
不超過頁面可用寬度 80%,保持寬高比 |
| 頁首頁尾 |
通過 section.header / section.footer 設定,頁碼用 OxmlElement('w:fldChar') 插入域程式碼 |
| 目錄 |
插入 TOC 域程式碼,提示使用者在 Word 中右鍵"更新域" |
| 模板填充 |
搜尋 {{key}} 佔位符替換為值,必須同時掃描段落和表格 |
Before / After:模板填充
❌ 錯誤:只替換段落中的佔位符,忽略表格
→ 表格裡的 {{日期}} 仍然顯示佔位符
✅ 正確:遍歷 doc.paragraphs + doc.tables 中所有 cell
→ 段落和表格內的佔位符都被替換
📕 PDF 處理
引擎分工:
| 操作 |
引擎 |
關鍵 API |
| 提取文本 |
PyMuPDF |
page.get_text() |
| 提取表格 |
pdfplumber |
page.extract_tables() |
| 合併 PDF |
PyMuPDF |
merged.insert_pdf(pdf) |
| 拆分 PDF |
PyMuPDF |
new_pdf.insert_pdf(pdf, from_page=i, to_page=i) |
| 新增水印 |
PyMuPDF |
page.insert_text(..., morph=(center, mat)) |
| 加密/解密 |
pypdf |
writer.encrypt() / reader.decrypt() |
關鍵規則
| 規則 |
說明 |
| PDF 不可直接編輯 |
"編輯 PDF" = 提取內容 → 修改 → 重新生成 |
| 中文水印必須指定字型檔案 |
fontfile="C:/Windows/Fonts/msyh.ttc",內建字型 helv 無中文字形 |
| 水印旋轉只能用 morph |
insert_text 的 rotate 只接受 0/90/180/270,自定義角度必須用 morph=(center, matrix) |
| 合併時保留書籤 |
用 fitz.get_toc() / set_toc() 保留原書籤 |
| 掃描件 PDF |
純圖片無文本層,必須 OCR(推薦 PaddleOCR),需提醒使用者 |
| fitz.open 必須用 with |
批次處理時未關閉檔案控制代碼會耗盡資源 |
Before / After:中文水印
❌ 錯誤:用內建字型 + rotate 引數
page.insert_text(center, "機密檔案", fontname="helv", rotate=45)
→ ValueError: bad rotate value(rotate 只支援 0/90/180/270)
→ 即使不報錯,helv 字型也無法渲染中文
✅ 正確:用系統字型 + morph 引數
mat = fitz.Matrix(cos, sin, -sin, cos, 0, 0)
page.insert_text(center, "機密檔案", fontfile="msyh.ttc", morph=(center, mat))
→ 中文正常渲染 + 任意角度旋轉
📙 PPT 處理
引擎: python-pptx
關鍵規則
| 規則 |
說明 |
| 字型必須在 run 級別設定 |
p.font.size 無效,必須 run = p.add_run(); run.font.size = Pt(44) |
| 預設 16:9 寬屏 |
slide_width = Inches(13.333), slide_height = Inches(7.5) |
| 中文標題字型 |
微軟雅黑/思源黑體(正文),等線/方正大標宋(標題) |
| 單頁文字限制 |
不超過 6 行,每行不超過 20 箇中文字元 |
| 圖表配色 |
使用專業色板,避免預設彩色 |
Before / After:PPT 字型設定
❌ 錯誤:在段落級別設定字型
p.text = "專案彙報"
p.font.size = Pt(44) # 無效!儲存後字型丟失
p.font.bold = True # 無效!
✅ 正確:在 run 級別設定字型
run = p.add_run()
run.text = "專案彙報"
run.font.size = Pt(44) # 有效
run.font.bold = True # 有效
🔄 格式轉換
轉換矩陣
| 源 → 目標 |
引擎 |
注意事項 |
| Markdown → Word |
python-docx |
解析 MD 標題/列表/表格/程式碼塊對映為 Word 樣式 |
| Markdown → PDF |
weasyprint / fitz |
MD→HTML→PDF,需處理中文字型 |
| Markdown → PPT |
python-pptx |
每個 # 標題生成一張幻燈片 |
| Excel → CSV |
pandas |
輸出用 UTF-8 BOM 編碼(Excel 相容) |
| Excel → Markdown |
pandas |
df.to_markdown() |
| Word → PDF |
LibreOffice 命令列 |
格式保真度遠高於純 Python 方案 |
| Word → Markdown |
python-docx |
提取文本+結構對映 |
| PDF → 文本 |
PyMuPDF |
page.get_text() |
| PDF → Markdown |
PyMuPDF |
提取文本+嘗試還原結構 |
| CSV → Excel |
pandas + openpyxl |
自動型別推斷,長數字列指定 dtype=str |
Before / After:MD→Word 表格處理
❌ 錯誤:遇到 | 表格行直接 pass/跳過
→ Markdown 中的關鍵資料表格被靜默丟棄,使用者開啟 Word 發現表格不見了
✅ 正確:收集連續 | 行 → 解析 → doc.add_table()
→ 所有 Markdown 表格完整保留到 Word 文件中
Word → PDF 最佳方案
# 推薦:LibreOffice 命令列(格式保真度最高)
soffice --headless --convert-to pdf input.docx --outdir ./output/
# Windows
"C:\Program Files\LibreOffice\program\soffice.exe" --headless --convert-to pdf input.docx
Markdown → Word 轉換規則
| Markdown 元素 |
Word 對映 |
注意 |
# / ## / ### |
add_heading(level=N) |
— |
- item / * item |
List Bullet 樣式 |
— |
1. item |
List Number 樣式 |
— |
> quote |
Intense Quote 樣式 |
— |
```code``` |
Normal + Consolas 9pt |
收集多行,整體設為等寬字型 |
\| table \| |
add_table() |
收集連續 | 行,解析後建立表格,不能丟棄 |
**bold** / *italic* |
Run 級別加粗/斜體 |
需解析行內格式 |
📊 智慧報告生成
報告結構模板
一、摘要(3-5 句話概括核心發現)
二、資料概覽(describe() 統計表 + 行數/列數/缺失值)
三、關鍵發現(top N 洞察,每條配資料支撐)
四、圖表分析(柱狀圖/餅圖/折線圖,標題和軸標籤必須中文)
五、結論與建議(可執行的下一步行動)
關鍵規則
| 規則 |
說明 |
| 圖表標題/軸標籤/圖例 |
必須為中文 |
| 數值格式 |
千分位分隔符,金額用 ¥ 符號 |
| 日期格式 |
統一 YYYY年MM月DD日 |
| 百分比 |
保留 1-2 位小數 |
| Excel 圖表 |
用 openpyxl.chart 的 BarChart/PieChart/LineChart + Reference |
| Word 表格 |
用 add_table(style='Light Grid Accent 1') |
⚡ 批次處理
批次處理規則
| 步驟 |
操作 |
| 1. 預檢 |
列出待處理檔案及數量,確認後再執行 |
| 2. 執行 |
單檔案失敗不中斷整體,try/except 記錄失敗項 |
| 3. 輸出 |
摘要:成功 N 個 / 失敗 M 個 / 跳過 K 個 |
| 4. 斷點 |
記錄已處理檔案,重跑時自動跳過 |
輸出命名
- 單檔案:原始檔名 +
_output / _converted 字尾
- 批次輸出:
output_YYYYMMDD_HHMMSS/ 子目錄
- 臨時檔案:
temp_ 字首,完成後自動清理
通用工作流
識別意圖 → 確定格式 → 查表選引擎 → 檢查依賴 → 執行 → 驗證 → 報告結果
依賴安裝
首次使用自動檢查並安裝:
pip install openpyxl python-docx PyMuPDF python-pptx pandas pdfplumber pypdf
# 注意:PyMuPDF 安裝後 import 名為 fitz;pypdf 6.x 已移除 PdfMerger
大檔案策略(>50MB)
| 格式 |
策略 |
| Excel |
openpyxl read_only 讀 / write_only 寫 |
| PDF |
fitz 逐頁處理,不一次載入 |
| CSV |
pandas.read_csv(chunksize=10000) 分塊迭代 |
中文排版規範
中英文混排
- 中英文之間加半形空格:"使用 Python 處理"而非"使用Python處理"
- 中文與數字之間加半形空格:"共 10 個檔案"而非"共10個檔案"
- 全形標點後不加空格,半形標點後加一個空格
- 英文專有名詞保持原始大小寫(Python、Excel、PDF)
標點符號
- 中文正文用全形標點(,。;:!?""''())
- 程式碼和技術文件用半形標點
- 省略號用
……(六個點),不用 ...
- 連線線用
——(兩個破折號)
字型方案
| 場景 |
中文字型 |
英文字型 |
| 正文 |
微軟雅黑 / 蘋方 |
Segoe UI / Helvetica |
| 標題 |
等線 / 方正大標宋 |
Arial / Georgia |
| 程式碼 |
— |
Consolas / Source Code Pro |
| 表格 |
微軟雅黑 |
Segoe UI |
錯誤處理
| 錯誤場景 |
處理方式 |
| 檔案不存在 |
提示路徑,建議用 Glob 查詢 |
| 檔案被佔用 |
提示關閉檔案,輸出到替代路徑 |
| 格式不支援 |
列出支援的格式,建議替代方案 |
| 庫未安裝 |
自動 pip install,失敗則提示手動安裝 |
| 編碼錯誤 |
依次回退 UTF-8 → GBK → GB18030 → latin1 |
| 大檔案超時 |
自動分塊,單頁/單表為單位 |
| 加密 PDF |
提示需要密碼,不嘗試暴力破解 |
| 空檔案/空表格 |
提示內容為空,不生成空輸出檔案 |
| 掃描件 PDF |
提示需 OCR(推薦 PaddleOCR/pytesseract) |
使用示例
示例 1:建立專案進度 Excel
使用者:幫我建立一個專案進度跟蹤表
→ 引擎:openpyxl
→ 操作:帶樣式表頭 + 資料驗證(狀態下拉框)+ 條件格式(進度資料條)
→ 輸出:project_tracker.xlsx
示例 2:PDF 合併
使用者:把 reports 資料夾下所有 PDF 合併成一個
→ 引擎:PyMuPDF
→ 操作:掃描目錄 → 按檔名排序 → 逐個插入 → 保留書籤
→ 輸出:reports_merged.pdf
示例 3:Markdown 轉 Word
使用者:把會議紀要的 Markdown 轉成正式的 Word 文件
→ 引擎:python-docx
→ 操作:解析 MD 標題/列表/表格/程式碼塊 → 對映為 Word 樣式 → 應用中文公文格式
→ 輸出:meeting_notes.docx
示例 4:資料分析報告
使用者:分析這個 Excel 的銷售資料,生成一份報告
→ 引擎:pandas + openpyxl + python-docx
→ 操作:統計概覽 → 關鍵發現 → 圖表 → 結論建議
→ 輸出:sales_report.docx + sales_report.xlsx
示例 5:批次 Word 轉 PDF
使用者:把 contracts 目錄下所有 Word 轉成 PDF
→ 引擎:LibreOffice 命令列
→ 操作:掃描目錄 → 確認檔案列表 → 批次轉換 → 輸出摘要
→ 輸出:output_20260616/ 目錄
示例 6:PDF 加密
使用者:給這份 PDF 加個密碼
→ 引擎:pypdf
→ 操作:讀取 → 複製所有頁面 → encrypt() → 儲存
→ 輸出:encrypted.pdf
示例 7:Word 模板批次填充
使用者:用這個合同模板,把 Excel 裡的 50 個員工資訊填進去,生成 50 份合同
→ 引擎:python-docx + pandas
→ 操作:讀取 Excel 資料 → 遍歷每行 → 替換模板佔位符(段落+表格) → 逐個儲存
→ 輸出:contracts/ 目錄下 50 個 docx 檔案