wps-attendance
考勤打卡统计。把考勤机导出的打卡数据丢进来,自动统计每个人的 迟到、早退、缺勤、加班时长,生成月度考勤汇总表,异常考勤自动标红。 用于帮助HR处理考勤数据。当用户提到考勤、打卡、迟到、加班统计时触发。 Attendance tracker - generates summary reports from…
批量套打神器。一份Word模板+一份Excel名单=自动生成100份个性化文档。 录取通知书、邀请函、证明信、催款函……只要有模板有数据就能批量出稿。 用于帮助用户批量生成个性化文档。当用户提到邮件合并、批量生成、套打时触发。 Mail merge tool - template + data source = batch personalized documents.
$ npx -y skills add Bwkyd/wps-skills --skill wps-mail-merge --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/wps-mail-mergeContext preview
The summary Claude sees to decide when to auto-load this skill.
批量套打神器。一份Word模板+一份Excel名单=自动生成100份个性化文档。 录取通知书、邀请函、证明信、催款函……只要有模板有数据就能批量出稿。 用于帮助用户批量生成个性化文档。当用户提到邮件合并、批量生成、套打时触发。 Mail merge tool - template + data source = batch personalized documents.
name: wps-mail-merge
description: |
批量套打神器。一份Word模板+一份Excel名单=自动生成100份个性化文档。
录取通知书、邀请函、证明信、催款函……只要有模板有数据就能批量出稿。
用于帮助用户批量生成个性化文档。当用户提到邮件合并、批量生成、套打时触发。
Mail merge tool - template + data source = batch personalized documents.
license: MIT
user-invocable: true
argument-hint: '[模板文件] [数据源文件]'
allowed-tools: 'Read, Grep, Glob, Bash, Write, Edit'
metadata:
author: BWKYD
title: 批量套打
description_zh: 用一份Word模板配合Excel数据,批量生成个性化文档
tags:
- 邮件合并
- 批量生成
- python-docx
- openpyxl
- WPS
version: 1.0.1
license: MITExcel 数据源 + Word 模板 → 批量生成几百份个性化文档。
**数据源(Excel/.xlsx/.csv):**
| 姓名 | 部门 | 职位 | 入职日期 | 薪资 | |--------|--------|---------|-------------|---------| | 张三 | 技术部 | 工程师 | 2026-04-01 | 15000 | | 李四 | 市场部 | 经理 | 2026-04-01 | 20000 |
**模板(Word/.docx)——用 `{{变量名}}` 标记:**
入职通知书
{{姓名}} 先生/女士:
恭喜您通过面试!现通知您于 {{入职日期}} 到 {{部门}} 报到,
担任 {{职位}} 一职,试用期月薪为人民币 {{薪资}} 元。
请携带以下材料:...
XX公司人力资源部
{{日期}}自动扫描模板中的 `{{变量名}}`,与数据源列名匹配:
📋 变量匹配结果
═════════════════════════════
模板变量 数据源列 状态
──────────────────────────────
{{姓名}} → 姓名列 ✅ 匹配
{{部门}} → 部门列 ✅ 匹配
{{职位}} → 职位列 ✅ 匹配
{{入职日期}} → 入职日期列 ✅ 匹配
{{薪资}} → 薪资列 ✅ 匹配
{{日期}} → (无匹配) ⚠️ 将使用当前日期
══════════════════════════════
数据行数:50 行
将生成:50 份文档pip install python-docx openpyxl 2>/dev/null || pip3 install python-docx openpyxl 2>/dev/null
from docx import Document
from openpyxl import load_workbook
from datetime import datetime
import os
import re
import csv
def mail_merge(template_path, data_path, output_dir=None,
filename_pattern='{{姓名}}', date_str=None):
"""
邮件合并:模板 + 数据源 → 批量文档
参数:
template_path: Word模板路径(含{{变量}}标记)
data_path: 数据源路径(.xlsx 或 .csv)
output_dir: 输出目录(默认 ./merged_output/)
filename_pattern: 输出文件名模式(可含变量)
date_str: 日期字符串(用于{{日期}}变量)
"""
if not output_dir:
output_dir = './merged_output'
os.makedirs(output_dir, exist_ok=True)
if not date_str:
date_str = datetime.now().strftime('%Y年%m月%d日')
# 读取数据源
records = []
if data_path.endswith('.csv'):
with open(data_path, 'r', encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
records = list(reader)
else:
wb = load_workbook(data_path)
ws = wb.active
headers = [cell.value for cell in ws[1]]
for row in ws.iter_rows(min_row=2, values_only=True):
if any(v is not None for v in row):
record = {}
for h, v in zip(headers, row):
if h:
record[h] = str(v) if v is not None else ''
records.append(record)
# 扫描模板变量
template_doc = Document(template_path)
template_vars = set()
for para in template_doc.paragraphs:
template_vars.update(re.findall(r'\{\{(.+?)\}\}', para.text))
for table in template_doc.tables:
for row in table.rows:
for cell in row.cells:
template_vars.update(re.findall(r'\{\{(.+?)\}\}', cell.text))
generated = []
for i, record in enumerate(records):
doc = Document(template_path)
# 添加内置变量
record.setdefault('日期', date_str)
record.setdefault('序号', str(i + 1))
# 替换段落中的变量
for para in doc.paragraphs:
for var_name in template_vars:
placeholder = '{{' + var_name + '}}'
if placeholder in para.text:
# 保持格式的替换
for run in para.runs:
if placeholder in run.text:
run.text = run.text.replace(
placeholder,
record.get(var_name, '')
)
# 替换表格中的变量
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for para in cell.paragraphs:
for var_name in template_vars:
placeholder = '{{' + var_name + '}}'
if placeholder in para.text:
for run in para.runs:
if placeholder in run.text:
run.text = run.text.replace(
placeholder,
record.get(var_name, '')
)
# 生成文件名
fname = filename_pattern
for var_name in template_vars:
fname = fname.replace(
'{{' + var_name + '}}',
record.get(var_name, '')
)
fname = re.sub(r'[\\/:*?"<>|]', '_', fname)
output_path = os.path.join(output_dir, f'{fname}.docx')
doc.save(output_path)
generated.append(output_path)
return generated
# 使用示例
# files = mail_merge('template.docx', 'data.xlsx',
# filename_pattern='入职通知_{{姓名}}')✅ 批量生成完成! ═══════════════════════════════════ 模板:入职通知模板.docx 数据源:新员工名单.xlsx(50条记录) 输出目录:./merged_output/ 📁 生成文件: 1. 入职通知_张三.docx 2. 入职通知_李四.docx 3. 入职通知_王五.docx ... 共 50 份 ⚠️ 请抽查几份确认内容正确
模板中支持简单条件:
{{#if 性别=男}}先生{{/if}}{{#if 性别=女}}女士{{/if}}(通过预处理数据实现,在数据源中增加"称呼"列)
数据源中的金额自动生成大写列: `15000` → 增加列 `薪资大写` = `壹万伍仟元整`
将所有文档合并为一个PDF(方便统一打印)
# 基本邮件
42 个 WPS Office 办公自动化 Claude Code Skills 集合 一句话指令,让 Claude 帮你自动生成 Word / Excel / PPT / PDF 文档。
Repo: Bwkyd/wps-skills
考勤打卡统计。把考勤机导出的打卡数据丢进来,自动统计每个人的 迟到、早退、缺勤、加班时长,生成月度考勤汇总表,异常考勤自动标红。 用于帮助HR处理考勤数据。当用户提到考勤、打卡、迟到、加班统计时触发。 Attendance tracker - generates summary reports from…
文档批量格式转换。把一个文件夹里的Word全转文本、Excel全导出CSV、 Markdown转Word,支持docx/txt/xlsx/csv/md等格式批量互转,一次搞定。 用于帮助用户批量转换文档格式。当用户提到批量转换、格式转换、导出时触发。 Batch converts documents between…
预算表一键生成。部门年度预算、项目预算、活动经费预算,选个模板填数字就行, 小计合计公式自动写好,还有预算vs实际对比和执行率自动计算。 用于帮助财务和行政制作预算表。当用户提到预算、费用表、经费时触发。 Budget spreadsheet generator with formulas and variance…
证书奖状批量生成。给一份名单,批量生成荣誉证书、结业证书、聘书、感谢信, 每人一份独立文件,年终评优、培训结业、表彰活动必备工具。 用于帮助用户批量生成证书。当用户提到证书、奖状、聘书时触发。 Batch certificate/award generator from a list of recipients.
数据图表一键生成。不知道数据该用什么图表?告诉我你的数据和目的, 自动推荐最佳图表类型并生成,柱状图折线图饼图散点图都支持,还帮你调配色。 用于帮助用户制作数据可视化图表。当用户提到图表、柱状图、折线图、饼图时触发。 Chart generator - recommends best chart type and…
日历排班值班表。生成带法定节假日和调休标注的月度/年度日历表, 还能做三班倒/两班倒排班表和节假日值班安排,颜色区分不同班次一目了然。 用于帮助用户生成日历和排班表。当用户提到日历、排班、值班、节假日时触发。 Chinese calendar with holidays, shift scheduling, and…