如何获取OneNote所有笔记本中全部页面的属性明细列表?
OneNote全页面清单导出方案(PowerShell + Python实现)
本方案仅适用于Win10/Win11上安装的Office桌面版OneNote(即OneNote 2016/2019/365版本),UWP版OneNote(Microsoft Store安装的OneNote for Windows 10)无公开COM接口,无法通过下述方法调用。
方案1:PowerShell实现(无需额外安装依赖)
直接将以下代码复制到PowerShell窗口运行,最终会在桌面生成onenote_pages.txt清单文件:
# 初始化OneNote COM对象 $OneNote = New-Object -ComObject OneNote.Application # 获取所有笔记本层级结构XML $hierarchy = "" $OneNote.GetHierarchy("", [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsPages, [ref]$hierarchy) # 解析XML结构 $xml = [xml]$hierarchy $ns = New-Object System.Xml.XmlNamespaceManager($xml.NameTable) $ns.AddNamespace("one", $xml.DocumentElement.NamespaceURI) # 定义结果保存路径 $outputPath = "$env:USERPROFILE\Desktop\onenote_pages.txt" # 遍历所有页面提取信息 $pages = $xml.SelectNodes("//one:Page", $ns) foreach ($page in $pages) { # 替换字段内的半角#为全角#,避免分隔冲突 $pageName = $page.name.Replace("#", "#") $createTime = $page.dateTime # 提取所属分区名称 $section = $page.ParentNode $sectionName = $section.name.Replace("#", "#") # 提取所属笔记本名称 $notebook = $section while ($notebook.LocalName -ne "Notebook") { $notebook = $notebook.ParentNode } $notebookName = $notebook.name.Replace("#", "#") # 按要求拼接行并写入文件 $line = "$pageName#$sectionName#$notebookName#$createTime" $line | Out-File -FilePath $outputPath -Append -Encoding UTF8 } # 释放COM资源 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($OneNote) | Out-Null Write-Host "导出完成,文件已保存到桌面"
方案2:Python实现
前置依赖
先执行命令安装pywin32库:pip install pywin32
示例代码
import win32com.client import os import xml.etree.ElementTree as ET def export_onenote_pages(): # 初始化OneNote COM对象 onenote = win32com.client.Dispatch("OneNote.Application") # 获取全量页面层级XML hierarchy = "" onenote.GetHierarchy("", win32com.client.constants.hsPages, hierarchy) # 解析XML root = ET.fromstring(hierarchy) ns = {"one": root.tag.split('}')[0].strip('{')} # 定义输出路径 output_path = os.path.join(os.path.expanduser("~"), "Desktop", "onenote_pages.txt") with open(output_path, "w", encoding="utf-8") as f: # 遍历所有页面 for page in root.findall(".//one:Page", ns): page_name = page.attrib.get("name", "").replace("#", "#") create_time = page.attrib.get("dateTime", "") # 提取所属分区 section = page.findall("..", ns)[0] section_name = section.attrib.get("name", "").replace("#", "#") # 提取所属笔记本 current = section while current.tag != "{%s}Notebook" % ns["one"]: current = current.findall("..", ns)[0] notebook_name = current.attrib.get("name", "").replace("#", "#") # 写入行 f.write(f"{page_name}#{section_name}#{notebook_name}#{create_time}\n") del onenote print("导出完成,文件已保存到桌面") if __name__ == "__main__": export_onenote_pages()
注意事项
- 代码中默认将字段内容中的半角
#替换为全角#,避免导入Excel时出现列错位,可根据实际需求调整替换规则 - 导出的txt文件导入Excel时,选择「数据」-「自文本/CSV」,分隔符选择自定义并输入
#即可正确分列 - 运行代码前请确保OneNote已正常启动登录,所有笔记本已同步到本地
内容的提问来源于stack exchange,提问作者dwids
相关产品推荐
相关产品推荐

