You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:09:04