← ClaudeAtlas

onenote-to-obsidianlisted

把 OneNote 分区文件(.one)解析为 Markdown 并导入 Obsidian。当用户需要从 OneNote 导出笔记、把 .one 转 md、OneNote 同步失败需要本地恢复、或导入 OneNote 分区到 vault 时使用。不依赖 OneNote 同步/云端,直接解析本地 .one 文件(经 OneNote COM API)。
Linearl/reasonix_skill_repo · ★ 2 · AI & Automation · score 63
Install: claude install-skill Linearl/reasonix_skill_repo
# OneNote .one 文件 → Obsidian Markdown 导入 把 OneNote 分区文件(.one,本地导出或缓存副本)解析为 Markdown,按季度/分区组织导入 Obsidian vault。**不依赖 OneNote 同步状态**——适合同步失败、分区被服务器删除、importer 漏导等场景的本地恢复。 ## 核心原理 - 用 **OneNote 桌面版 COM API**(`OneNote.Application`,PowerShell 调用)打开本地 .one 文件: - `OpenHierarchy(path, '', [ref]hier, 0)` —— **第 4 参数必须 0(cftLocal)**,其他值报 0x80042018 - `GetHierarchy(hier, 1, [ref]xml)` —— **scope 必须 1(hsChildren)**,3 会返回 0 页面,2 报 0x80042014 - 逐页 `GetPageContent(pageId, [ref]xml, 1)` —— **第 3 参数必须 1(piBinaryData)才有 `<one:Data>` base64 图片**;0(piBasic)只有 `<one:Image>` 空壳(图片在 .one 文件块里但拿不到)。2026-08-12 实战确认:所有"页面有 Image 但 0 Data"的谜团都是这个参数用错——8-7 管线成功提取 1527 张图就是用了 `-PageInfo 1` - PowerShell 逐页导出为 XML 文件 + index.tsv,Python 解析 XML → Markdown(剥 span 富文本、checkbox 还原、嵌套缩进) ## 前置条件(本机已具备) - OneNote 桌面版(`C:\Program Files\Microsoft Office\root\Office16\ONENOTE.EXE`) - PowerShell 5.1+(Windows 自带) - Python 3(标准库即可) ## 常见故障:导出 .one 不完整(页面缺失) **现象**:导出的 .one 文件页面数远少于客户端显示的页面数(如 759MB 文件只有 11 页;同步报错的分区导出后缺大量周报)。 **根因(实战确认)**:**未同步(0xE0000063/0xE000006A)的页面在迁移/导出流程中被跳过**——剪贴分区时同步失败的页面不会迁移成功,导出 .one 时这些页面连页面条目都不会写入文件(不只是内容缺失)。客户端能看到(缓存)≠ 文件里有。 **解决**: 1. 先修复同步:OneNote 中右键分区 → 立即同步,等报错消失(或把内容剪贴到同步健康的新分区,待新分区完全同步) 2. **重新导出 .one** 后再解析——同步修复后重新导出的文件才是完整的(实战:19-20.one 28 页 → 重新导出 169 页;21~23Q1.one 1 页 → 305 页) 3. 判断导出是否完整:`GetHierarchy` 页面数 ≈ 客户端显示的页面数;或抽查报错列表中的页面名是否出现在页面列表里 **教训**:文件大小与内容完整性无关(759MB 空壳 vs 72MB 完整);"客户端能看到"不能证明导出文件完整。 ## 常见故障:在线分区图片未下载(页面有 Image 但 Data 全空 / 页面索引缺失) **现象**:分区能