Sheet-to-Doc Skill 实战:让 AI Assistants 自动生成 Word Documents 的配置骨架
1. 从一张 Excel 到五十份 Word我为什么盯上了 Sheet-to-Doc Skill如果你每天的工作里有一项是「把表格里的数据填进固定格式的 Word 文档」那你大概率经历过这种循环打开模板、复制姓名、切回表格、粘贴、再复制下一列、再切回来……五十份文档做完眼睛花了还总有一两份把「张三」的邮箱填成了「李四」的。Sheet-to-Doc Skill 就是冲着这个场景来的。它是一个给 AI Assistants 用的技能插件核心能力只有一句话把 Word 模板里的{字段}占位符用 JSON 数据替换掉生成新的 Word Documents。你不需要记复杂命令只要告诉 AI「用这份数据填这个模板」它就会自动读模板、读数据、填字段、导出文件。它适合谁三类人最明显一是行政/HR要批量出欢迎信、证明、通知二是销售/商务要按客户名单生成报价单三是项目管理者要给多个项目出统一格式的周报。这些场景的共同点是——模板固定、数据在表格里、量大且重复。我实测下来整个链路最关键的其实不是生成动作本身而是「配置骨架」有没有搭对Skill 装在哪、settings.json 怎么写、模板占位符和数据字段怎么对齐。这三步对了后面就是一句话的事这三步错了AI 会一直告诉你「找不到模板」或者「字段缺失」。下面我把这套骨架拆开讲你可以直接照着复制。2. 前置准备TaoToken 接入与运行环境确认在讲 Skill 配置之前得先把「AI 从哪来」这件事解决掉。Sheet-to-Doc Skill 本身是个执行器它需要一个能调用模型的 AI Assistant 来驱动。我这边统一用 TaoToken 做模型接入层原因是它的接口格式和主流 SDK 兼容配置一次就能在多个工具里复用。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意这两个地址的区别官网用来注册、看文档、管理额度API 基址是写进配置文件里的那个。运行环境方面Sheet-to-Doc Skill 依赖 Node.js 18 或更高版本。你可以先确认一下node -v # 期望输出类似 v18.20.0 或更高 npm -v # 期望输出 9.x 或更高如果版本低于 18建议先升级。我踩过的坑是Node 16 下装 Skill 能装上但生成文档时会报structuredClone is not defined因为 Skill 内部用了 Node 17 才稳定的 API。升级到 18 之后问题消失。接下来拿 API Key。进入控制台后创建一个新的 Key建议按用途命名比如sheet-to-doc-dev方便后面排查是哪个 Key 出的问题。创建入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 列表在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。Key 只在创建时完整显示一次复制后先存到本地环境变量里别直接写进会提交到 Git 的文件。# macOS / Linux export TAOTOKEN_API_KEYsk-你的key # Windows PowerShell $env:TAOTOKEN_API_KEYsk-你的key如果你打算长期跑批量任务建议用 Coding Plan 来管理额度避免单次调用把额度打满。相关入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有针对不同客户端的配置示例遇到 401 或 404 时对照着看最快。3. 可复制的 Skill 配置骨架与 settings.json 示例这一节是全文的核心。我把配置拆成三层Skill 安装层、AI Assistant 接入层、项目级 settings.json 层。三层各管各的出问题时能快速定位是哪一层。3.1 安装 Sheet-to-Doc Skill如果你用的是 OpenClaw 这类支持 Skill 的平台安装命令是npm install -g openclaw openclaw skills install he-yang/sheet-to-doc-skill如果你用的是其他支持 Skills CLI 的 AI 平台用这条npx skills add https://github.com/he-yang/sheet-to-doc-skill --skill sheet-to-doc-skill装完之后Skill 会被放到平台的 skills 目录下。你可以用openclaw skills list确认它出现在列表里。如果没出现八成是全局安装路径没进 PATH检查一下 npm 的 global prefix。3.2 AI Assistant 接入配置以 Cursor 或 Claude Code 这类工具为例模型接入部分通常写在各自的配置文件里。核心是三个字段base URL、API Key、模型名。base URL 填https://taotoken.net/apiKey 用上一步的环境变量模型名按你实际选用的填。{ provider: taotoken, baseUrl: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY}, model: claude-sonnet-4-20250514 }用${TAOTOKEN_API_KEY}这种引用方式比把 Key 明文写进去安全得多。如果你用的是 Claude Code 的 Anthropic 兼容模式配置入口在 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentClaudeCodeAnthropicutm_campaignrewrite 里面有完整的字段对照表。3.3 项目级 settings.json 骨架这是最容易被忽略、但最影响成功率的一层。在项目根目录建一个settings.json把模板路径、数据路径、输出目录、字段映射规则都写清楚。AI 读了这个文件就不需要你每次在对话里重复描述。{ skill: sheet-to-doc, template: { path: ./templates/welcome_letter.docx, placeholderPattern: \\{([a-zA-Z_][a-zA-Z0-9_]*)\\}, strictMode: true }, data: { source: ./data/employee_data.json, encoding: utf-8, allowMissing: false }, output: { dir: ./output, filenamePattern: welcome_{name}_{start_date}.docx, overwrite: false }, footer: { enabled: true, text: Generated by Sheet-to-Doc Skill } }几个参数值得单独说。strictMode设为 true 时模板里出现但数据里没有的字段会直接报错而不是留空——批量场景下这个更安全避免生成一堆缺字段的文档。allowMissing设为 false 是同样的逻辑。filenamePattern支持用字段名做变量这样五十份文档不会互相覆盖。footer.enabled控制是否加页脚归属简化版默认开启。3.4 模板与数据的对齐规则模板里写{name}数据 JSON 里就必须有name这个 key大小写敏感。我建议在正式生成前先跑一次占位符提取把模板里所有字段列出来再拿它去比对数据文件的 key 集合。这一步能省掉后面 80% 的报错。node scripts/generate.js --extract-placeholders --template ./templates/welcome_letter.docx输出会是一个 JSON包含placeholders数组和count。把这个数组复制出来和你数据文件里的 key 做一次差集缺哪个补哪个。4. 跑通一次完整生成从表格到 Word 的验证请求配置搭好之后跑一次完整链路。我用「批量生成员工欢迎信」这个场景来演示因为它字段少、结果直观适合第一次验证。4.1 准备模板新建一个 Word 文档内容如下存为templates/welcome_letter.docxDear {name}, Welcome to {company}. Your position is {position}. Your contact information: - Email: {email} - Phone: {phone} Your start date is {start_date}. Please bring the required documents to the HR department on that day. We look forward to working with you! Best regards, {company}注意占位符用英文花括号中间不要有空格。中文花括号不会被识别这是新手最常犯的错。4.2 准备数据存为data/employee_data.json{ name: Zhang Wei, company: Example Tech Co., Ltd., position: Senior Software Engineer, email: zhang.weiexample.com, phone: 86 13800138000, start_date: 2026-08-01 }4.3 用 AI 对话触发在 AI Assistant 里输入读取 settings.json用 data/employee_data.json 的数据填充 templates/welcome_letter.docx输出到 output 目录。AI 会依次执行读 settings.json → 读模板 → 提取占位符 → 读数据 → 校验字段完整性 → 替换 → 写出新文档。如果strictMode为 true 且字段齐全你会看到类似这样的返回{ success: true, output: ./output/welcome_Zhang Wei_2026-08-01.docx, placeholdersFilled: 6, missingFields: [], durationMs: 842 }4.4 命令行方式验证如果你不想走对话直接命令行跑也行node scripts/generate.js \ --template ./templates/welcome_letter.docx \ --data ./data/employee_data.json \ --output ./output/welcome_output.docx短参数版本node scripts/generate.js -t ./templates/welcome_letter.docx -d ./data/employee_data.json -o ./output/welcome_output.docx也可以直接把 JSON 字符串塞进去适合临时测试node scripts/generate.js -t ./templates/welcome_letter.docx -d {name:Li Na,company:Example Tech,position:PM,email:li.naexample.com,phone:86 13900139000,start_date:2026-08-15} -o ./output/test.docx4.5 校验生成结果生成之后别急着关终端做两步校验。第一步用--extract-placeholders再跑一次模板确认占位符列表没变。第二步打开生成的 docx检查三处字段是否都替换了、页脚归属是否按配置出现、文件名是否符合filenamePattern。如果你要批量跑把数据换成 JSONL 格式每行一个对象然后写个循环while IFS read -r line; do echo $line /tmp/row.json node scripts/generate.js -t ./templates/welcome_letter.docx -d /tmp/row.json -o ./output/row_$(date %s%N).docx done ./data/employees.jsonl这个循环里用时间戳做文件名后缀避免覆盖。生产环境建议改成用数据里的唯一字段比如工号。5. 本篇常见错排查从报错到定位这一节按报错信息来组织你遇到哪条查哪条。5.1Template file not found路径问题占九成。先确认settings.json里的template.path是相对项目根目录还是相对脚本目录。Skill 默认按项目根目录解析如果你在子目录里跑命令路径就会错。解决办法是统一用绝对路径或者在命令前先cd到项目根。5.2Missing fields: [email, phone]数据里缺字段。用--extract-placeholders拿到模板需要的完整字段列表再和你的 JSON key 做比对。注意 JSON 的 key 是大小写敏感的Email和email是两个不同的字段。另外检查一下数据文件是不是有多层嵌套Skill 默认只读顶层 key。5.3structuredClone is not definedNode 版本低于 17。升级到 18 或更高即可。如果你用的是 nvmnvm install 18 nvm use 18两行搞定。5.4 生成的文档里占位符没被替换三种可能一是模板里用了中文花括号二是占位符里有空格比如{ name }三是placeholderPattern被改过和模板实际格式不匹配。回到settings.json确认placeholderPattern是默认的\\{([a-zA-Z_][a-zA-Z0-9_]*)\\}然后检查模板。5.5 页脚归属没出现检查settings.json里footer.enabled是否为 true。简化版默认加页脚如果你手动关掉了就不会有。另外页脚是加在生成的新文档上不会改你的原始模板。5.6 批量生成时文件名冲突filenamePattern里如果只用了固定字符串五十份文档会互相覆盖。改成包含唯一字段的模式比如welcome_{name}_{start_date}.docx。如果数据里没有天然唯一的字段加一个序号变量或者在循环里用时间戳。5.7 API 返回 401 或 404401 是 Key 无效或没带上检查环境变量TAOTOKEN_API_KEY是否在当前 shell 里生效。404 通常是 base URL 写错了确认是https://taotoken.net/api而不是带路径的完整地址。接入文档里有各客户端的正确写法对照着改。6. 把 Skill 接进你的日常工作流跑通单次生成之后下一步是把它变成习惯。我的做法是在项目里固定三个目录templates/放 Word 模板data/放 JSON 或 JSONL 数据output/放生成结果。settings.json放在根目录所有路径都相对它写。这样换一台机器只要把这三个目录和配置文件拷过去装好 Skill 就能直接跑。如果你要验证不同模型对生成结果的影响可以用模型对话入口快速切换对比https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。长期跑批量任务的话Coding Plan 的额度管理会更省心入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。Key 管理和接入文档分别在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 和 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。最后留一个实用技巧每次改完模板先跑--extract-placeholders把输出存成placeholders.json提交到版本库。下次数据字段有变动时直接 diff 这个文件就能知道模板和数据哪边先变了。这个习惯帮我省掉了好几次「生成到一半才发现字段对不上」的返工。