wpsnote/wpsnote-skills/doc-importer
Claude Code and agent skill by wpsnote/wpsnote-skills
- community
Checking that the SKILL.md file is still in the repository.
将本地文档批量导入到 WPS 笔记。支持扫描 Obsidian Vault、思源笔记、微信公众号存档、 下载目录或任意用户指定目录,自动识别 HTML、Markdown、PDF、DOCX、PPTX、XLSX 等格式, 转换为 WPS 笔记可读内容并保留图片和富文本格式。 当用户说「导入文档到 WPS 笔记」「把我的 Obsidian 笔记导入」「导入思源笔记」 「把下载的 PDF/Word/PPT 导入笔记」「把公众号文章导入笔记」「同步本地文档到 WPS 笔记」时触发。 不适用于直接编辑 WPS 笔记内容、文档格式转换(不导入到笔记)。
Install
npx vskill@latest install wpsnote/wpsnote-skills/doc-importerSKILL.md
文档导入器(Doc Importer)
将本地文档(Obsidian、思源笔记、微信公众号 HTML、下载目录或任意目录)批量导入到 WPS 笔记。
快速开始
当前技能的笔记写入统一走笔记 Agent 工具;如需理解批量扫描和转换逻辑,可先读取本 Skill 自带脚本:
支持的文档来源
| 来源 | 说明 | 典型目录结构 | |
|---|---|---|---|
| Obsidian Vault | 扫描 .md 文件,保留 wiki 链接、Callout、标签 | Vault/笔记名.md + attachments/ | |
| 思源笔记 | 扫描 .sy 文件(JSON格式),提取 Block Tree | SiYuan/data/笔记本/文档.sy | |
| 微信公众号 | 解析 原文.html(含富文本格式、内联样式) | 文章名/原文.html + 图片/ | |
| 任意目录 | 用户指定路径,递归扫描子目录 | 任意 |
支持的文件格式
| 格式 | 转换方式 | 图片处理 | 富文本保留 | |
|---|---|---|---|---|
.html | BeautifulSoup 解析内联样式 | 本地图片 base64 | ✅ 颜色/粗体/标题 | |
.md / .markdown | 直接解析,转 WPS XML | 本地图片 base64 | 基本格式 | |
.pdf | pdfplumber 提取文本 + pdfimages 提取图片 | 提取嵌入图片 | 标题推断 | |
.docx | pandoc 转 markdown,提取 word/media/ | 解包提取 | 基本格式 | |
.pptx | markitdown 提取文本 + 解包媒体 | 解包提取 | 幻灯片结构 | |
.xlsx | pandas 读取,转 WPS table | 不含图片 | 表格结构 | |
.txt | 直接读取 | 不含图片 | 无 | |
.sy | JSON 解析思源 Block Tree | 提取 assets 图片 | 全部 |
WPS API 关键限制(必读)
在实际导入前,必须了解以下 WPS 笔记 API 的重要限制,否则会导致内容丢失或图片插入失败。
1. get_note_outline 默认只返回 100 个 block
get_note_outline 默认按分页视图返回 block,blocks 数组可能只覆盖前一部分内容,但 block_count 会返回真实总数。
影响:大文章(> 100 个 block)如果只靠首屏大纲查占位符,只能找到前一部分 block,后半段图片会丢失。
解决方案:先用 get_note_outline 拿首批 block,再用 read_blocks 续读:
get_note_outline返回的 block 常带preview字段;read_blocks更适合拿完整 XML 内容。
2. insert_image 在旧版 WPS 中只能插到前台笔记
旧版本(< 0.1.4):insert_image 的图片 fileID 绑定到当前 WPS 客户端 UI 中打开的笔记,即使传了 note_id 参数,图片也会错误地关联到前台笔记。
新版本(>= 0.1.4):已修复,insert_image 可以直接后台插图到任意笔记,无需切换前台。
处理策略:
- 先按后台插图能力执行;如果图片插错位置,再回退为“切到目标笔记后插图”
- 如果宿主或客户端仍表现为旧版行为,明确提示用户升级或手动切到目标笔记
- 插图后务必回读验收,不要假设成功
3. list_notes 返回大数据时要主动收敛范围
list_notes 一次返回的数据过大时,不适合拿来做全文去重或全量扫描判断。
解决方案:
- 去重优先用
search_notes按标题关键词搜索 - 浏览列表时主动分页或缩小筛选范围
- 不把一次大范围
list_notes当成唯一真相来源
4. anchor 失效导致内容静默丢失
连续调用 batch_edit 插入内容时,WPS 内部可能重新索引,导致前一次操作返回的 anchor_id 失效。如果不处理,后续内容会静默跳过,造成文章后半段内容丢失。
必须实现重试逻辑:
获取最新 anchor(最后一个 block):
5. 批量写入的稳定参数
大量内容写入时,BATCH_SIZE(每次 batch_edit 的 block 数)建议设为 4,过大会增加 anchor 失效概率。
完整工作流
第一步:确定扫描目录
优先根据用户已给出的目录 / 文件线索判断来源类型,不足时再 `ask_user` 补最少必要信息:
第二步:扫描文档列表
输出 JSON 格式:
estimated_blocks帮助预判是否会超过 100 block,提前提示用户。
第三步:展示文件清单,询问选择
第四步:去重检测
导入前通过标题检查 WPS 笔记中是否已存在同名笔记。
注意:不要把 list_notes 当成去重主入口,改用 search_notes 按标题关键词搜索:
发现重复时询问用户:
第五步:转换并导入
推荐流程(以 HTML 富文本为例):
Meta 行格式(根据来源类型灵活调整):
第六步:进度报告
转换脚本参考(需要查看实现时)
笔记工具逐步写入(需要手动接管时)
各来源特殊处理
微信公众号 HTML(原文.html)
微信公众号文章使用内联 CSS 样式表达富文本,需要从 HTML 解析格式:
目录结构:
HTML 解析要点:
- 正文在
#js_content容器内 - 图片在
<img data-src="https://...">属性中(不是src) - 标题通过
font-size >= 18px的 span 推断 - 颜色通过 span 的
color: rgb(...)样式提取,需映射到 WPS 预设色 - 粗体通过
font-weight: 700或bold识别
内联样式 → WPS XML 映射:
详细颜色映射规则见 references/conversion-guide.md 第 10 节。
Obsidian Vault
- Wiki 链接:
[[文件名]]→ 纯文本;[[文件名|显示名]]→显示名 - 标签:
#标签名→<tag>#标签名</tag> - Callouts:
> [!NOTE]→ WPS<highlightBlock> - Frontmatter:YAML 头部提取为 meta 信息
- 图片路径:先找同目录 → 再找
attachments/→ 再找 Vault 根目录
思源笔记(SiYuan)
.sy文件是 JSON 格式的 Block Tree- 图片路径格式为
assets/xxx.png,实际文件在<工作空间>/data/assets/ - 详细节点类型映射见
references/conversion-guide.md第 6 节
故障排查
get_note_outline 只返回 100 个 block,后面内容丢失
使用翻页方案,见"WPS API 关键限制"第 1 条。
图片插入后点击显示加载失败
旧版 WPS(< 0.1.4)insert_image 的 fileID 绑定到前台笔记,升级到最新版本可解决。
insert_image 报 IMAGE_FETCH_FAILED
- 检查 base64 data URI 格式:必须是
data:image/jpeg;base64,<数据>(不能是data:application/octet-stream) - 大图片优先使用稳定 URL;如果只能传 base64,确保传入的是完整 data URI
anchor 失效导致内容截断
实现 4 次重试逻辑,每次失败后重新获取 last_block_id,见"WPS API 关键限制"第 4 条。
list_notes / search_notes 返回结果过多
缩小筛选范围或主动分页,见"WPS API 关键限制"第 3 条。
pandoc 未安装
pdfplumber 未安装
PDF 扫描版无文字(需要 OCR)
依赖项清单
| 工具 | 用途 | 安装 | |
|---|---|---|---|
笔记 Agent 工具(create_note / get_note_outline / batch_edit / insert_image / read_note / read_blocks / search_notes / sync_note) | WPS 笔记写入、去重与回读(必须) | 宿主提供 | |
beautifulsoup4 | HTML 解析(公众号/网页) | pip3 install beautifulsoup4 | |
lxml | HTML 解析加速 | pip3 install lxml | |
pandoc | DOCX → Markdown | brew install pandoc | |
pdfplumber | PDF 文本/表格提取 | pip3 install pdfplumber | |
pypdf | PDF 图片提取备选 | pip3 install pypdf | |
markitdown | PPTX → Markdown | pip3 install "markitdown[pptx]" | |
pandas | XLSX 读取 | pip3 install pandas openpyxl | |
pillow | 图片处理/base64转换 | pip3 install pillow | |
python-frontmatter | YAML Frontmatter 解析 | pip3 install python-frontmatter |
详细转换逻辑见 references/conversion-guide.md。
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/doc-importer/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/wpsnote/wpsnote-skills/doc-importer)