name: word-vba description: "Word文件讀寫Skill - 基於VBA和ActiveX,支援doc/docx格式,提供完整讀寫、批次處理、文件合併、模板填充等功能" metadata: openclaw: emoji: 📄
通過Python呼叫Word VBA/ActiveX,實現Word文件的完整讀寫、批次處理、文件合併、模板填充等高階功能。
觸發語句: - "讀取Word文件" - "寫入Word檔案" - "合併多個Word文件" - "填充Word模板" - "批次替換Word內容"
需要提供的資訊: 1. 必需: 檔案路徑、操作型別 2. 可選: 格式要求、輸出路徑
功能: 讀取Word文件的文本和完整格式資訊
使用示例:
from word_vba_reader import WordReader
reader = WordReader()
result = reader.read_document("D:/docs/申請書.docx")
# 檢視文件統計
print(f"段落數: {result['paragraph_count']}")
print(f"詞數: {result['word_count']}")
print(f"頁數: {result['pages']}")
# 遍歷段落
for para in result['paragraphs']:
print(f"文本: {para['text']}")
print(f"字型: {para['format']['font_name']}")
print(f"大小: {para['format']['font_size']}")
print(f"粗體: {para['format']['bold']}")
功能: 建立新Word文件並設定格式
使用示例:
from word_vba_writer import WordWriter
writer = WordWriter()
doc = writer.create_document()
# 新增標題
writer.add_heading(doc, "一、立項依據", level=1)
# 新增格式段落
writer.add_paragraph(doc, "這是正文內容。", {
'font_name': '宋體',
'font_size': 12,
'bold': False,
'alignment': 'justify',
'first_line_indent': 24 # 首行縮排24磅
})
# 新增表格
table_data = [
["姓名", "年齡", "單位"],
["張三", "30", "清華大學"],
["李四", "28", "北京大學"]
]
writer.add_table(doc, 3, 3, table_data)
# 儲存
writer.save_document(doc, "D:/output/文件.docx")
writer.close()
功能: 將多個Word文件合併為一個
使用示例:
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
# 合併多個章節為完整申請書
file_list = [
"D:/chapters/摘要.docx",
"D:/chapters/立項依據.docx",
"D:/chapters/研究內容.docx",
"D:/chapters/研究基礎.docx"
]
utils.merge_documents(
file_list=file_list,
output_path="D:/output/完整申請書.docx",
add_page_breaks=True, # 章節間新增分頁符
keep_source_format=True # 保留源格式
)
功能: 根據模板和資料生成文件
模板示例:
專案名稱: {{project_name}}
專案負責人: {{leader}}
研究期限: {{start_date}} 至 {{end_date}}
申請經費: {{budget}}萬元
使用示例:
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
# 填充資料
data = {
'project_name': '振動臺子結構試驗關鍵技術研究',
'leader': '紀金豹',
'start_date': '2026.01',
'end_date': '2029.12',
'budget': '50'
}
utils.fill_template(
template_path="D:/templates/基金模板.docx",
data=data,
output_path="D:/output/填充後申請書.docx"
)
功能: 批次替換文件中的文本
使用示例:
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
# 定義替換規則
replacements = {
'2025年': '2026年',
'面上專案': '青年基金專案',
'50萬元': '30萬元'
}
utils.batch_replace(
file_path="D:/docs/舊版本.docx",
replacements=replacements,
output_path="D:/output/新版本.docx"
)
功能: 提取文件的標題結構
使用示例:
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
headings = utils.extract_headings("D:/docs/論文.docx")
for h in headings:
indent = " " * (h['level'] - 1)
print(f"{indent}{h['level']}. {h['text']}")
# 輸出:
# 1. 第一章 引言
# 1.1 研究背景
# 1.2 研究意義
# 2. 第二章 文獻綜述
# ...
功能: 為文件自動生成目錄
使用示例:
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
utils.generate_toc(
file_path="D:/docs/論文.docx",
output_path="D:/output/論文_含目錄.docx"
)
功能: 比較兩個文件的差異
使用示例:
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
utils.compare_documents(
doc1_path="D:/docs/初稿.docx",
doc2_path="D:/docs/修改稿.docx",
output_path="D:/output/差異比較.docx"
)
功能: 對多個文件執行相同操作
使用示例:
from word_vba_utils import WordVBAUtils
from word_vba_writer import WordWriter
utils = WordVBAUtils()
# 定義處理函式:新增頁首
def add_header(doc):
header = doc.Sections(1).Headers(1)
header.Range.Text = "機密檔案"
header.Range.Font.Name = "宋體"
header.Range.Font.Size = 10
# 批次處理
file_list = ["D:/docs/1.docx", "D:/docs/2.docx", "D:/docs/3.docx"]
utils.batch_process(
file_list=file_list,
processor=add_header,
output_dir="D:/output/processed/"
)
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
# 合併各章節
sections = [
"摘要.docx",
"一、立項依據與研究內容.docx",
"二、研究方案.docx",
"三、創新點.docx",
"四、研究基礎.docx"
]
utils.merge_documents(
file_list=[f"D:/fund/{s}" for s in sections],
output_path="D:/fund/NSFC申請書_完整版.docx",
add_page_breaks=True
)
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
# 獲獎名單
winners = [
{'name': '張三', 'award': '一等獎', 'date': '2026-03-04'},
{'name': '李四', 'award': '二等獎', 'date': '2026-03-04'},
{'name': '王五', 'award': '三等獎', 'date': '2026-03-04'}
]
# 批次生成
for i, person in enumerate(winners, 1):
utils.fill_template(
template_path="D:/templates/證書模板.docx",
data=person,
output_path=f"D:/output/證書_{i}_{person['name']}.docx"
)
from word_vba_utils import WordVBAUtils
utils = WordVBAUtils()
# 統一替換期刊名稱縮寫
replacements = {
'Earthquake Engineering and Structural Dynamics': 'Earthq. Eng. Struct. Dyn.',
'Journal of Structural Engineering': 'J. Struct. Eng.',
'Mechanical Systems and Signal Processing': 'Mech. Syst. Signal Process.'
}
utils.batch_replace(
file_path="D:/papers/參考文獻.docx",
replacements=replacements,
output_path="D:/papers/參考文獻_縮寫版.docx"
)
pip install pywin32| 特性 | word-vba | docx-tools |
|---|---|---|
| 依賴 | 需要Microsoft Word | 純Python |
| 平臺 | 僅Windows | 跨平臺 |
| 功能 | 完整(VBA所有功能) | 基礎功能 |
| 速度 | 較慢(啟動Word) | 快 |
| 格式支援 | 100%(包括複雜樣式) | 基本格式 |
| 批次處理 | ✅ 支援 | ✅ 支援 |
| 模板填充 | ✅ 支援 | ❌ 不支援 |
| 文件合併 | ✅ 保留格式 | ⚠️ 有限支援 |
| 目錄生成 | ✅ 支援 | ❌ 不支援 |
選擇建議: - 需要精確格式控制、複雜操作 → word-vba - 快速批次處理、跨平臺需求 → docx-tools
原因: Word未安裝或COM介面未註冊 解決: 1. 確保已安裝Microsoft Word 2. 嘗試修復Office安裝 3. 以管理員身份執行
解決: 關閉Word中已開啟的該文件,或重啟Word程序
解決: 檢查文件是否使用了特殊樣式或模板
想要更強大的技能外掛,就來小蔥技能站7w4.net看看吧。
解決: pip install pywin32
writer.close() 或 utils._close_word() 釋放資源batch_process 而不是迴圈開啟單個檔案技能版本: v2.0 更新日期: 2026-03-04 更新說明: 新增高階功能模組(合併、模板、批次處理等)
這個Word處理工具功能比較全面,能讀寫文件、合併檔案、填充模板。但它只能在Windows系統上使用,還必須安裝Microsoft Word軟體,對其他作業系統使用者不太友好。程式碼整體質量尚可,不過錯誤提示和資源清理方面還有改進空間。適合Windows環境下有專業文件處理需求的使用者。