几行代码实现OneNote转换Markdown格式(以导入其他笔记软件)

几行代码实现OneNote转换Markdown格式(以导入其他笔记软件)

技术教程gslnedu2025-06-02 15:12:414A+A-

Markdown笔记软件大势所趋,OneNote由于对中文支持很差在AI并入office前功败垂成,因此,OneNote转换Markdown格式,更换知识管理软件非常重要。另外,Markdown格式是这一时代的“AI语言”,只有将文件保存为markdown格式,AI才能更好地理解,因此,构建以Markdown为主的知识库非常重要。

OneNote作为上一闭源笔记软件时代的主流软件,如何做好旧知识库与新知识库衔接,这项工作对用户融入AI时代,非常具有意义。

方法1

具体思路:OneNote导出word

利用python的 os、time、mammoth、markdownify库,word转换为markdown文件

import time
import os


import mammoth
from markdownify import markdownify


#  Word 文档内的图片存储
def convert_img(image):
    with image.open() as image_bytes:
        file_suffix = image.content_type.split("/")[1]
        path_file = "./Others/{}.{}".format(str(time.time()),file_suffix)
        with open(path_file, 'wb') as f:
            f.write(image_bytes.read())


    return {"src":path_file}


def word2markdown(docxPath:str):
    docxTitile = docxPath.split('\\')[-1].split('.')[0]


    with open(docxPath ,"rb") as docx_file:
        # 转化 Word 文档为 HTML
        result = mammoth.convert_to_html(docx_file,convert_image=mammoth.images.img_element(convert_img))
        # result = mammoth.convert_to_html(docx_file)
        # 获取 HTML 内容
        html = result.value
        # 转化 HTML 为 Markdown
        md = markdownify(html,heading_style="ATX")
        # print(md)
        with open("./"+docxTitile+".md","w",encoding='utf-8') as md_file:
            md_file.write(md)
        messages = result.messages
        print("转换完成.{}",docxPath)
# 读取 Word 文件
base_URL = "E:\\Word"
if os.path.exists(base_URL):
    list = os.listdir(base_URL)
    docxList = []


    for i in range(len(list)):
        if list[i].endswith('.docx'):
            docxList.append(list[i])


    for i in range(len(docxList)):
        word2markdown(os.path.join(base_URL,docxList[i]))


方法2

可以使用 win32com 模块来实现批量将 OneNote 笔记本转换为 markdown 文件的功能。需要注意的是,由于 OneNote 的 COM API 只能在 Windows 系统上使用,因此以下代码只能在 Windows 环境下运行。

首先,需要安装 pywin32 库:

pip install pywin32


使用以下代码进行 OneNote 转换为 markdown:


import os

import win32com.client




# OneNote 笔记本所在路径

path = "D:\\数据库\\数据库-OneNote\\OneNote 笔记本"




# markdown 文件存储路径

markdown_path = "D:\\markdown"




# 创建 OneNote 应用程序对象

onenote = win32com.client.Dispatch("OneNote.Application")




# 获取所有打开的 OneNote 笔记本

notebooks = onenote.GetHierarchy("", win32com.client.constants.hsNotebooks)




# 遍历所有笔记本

for notebook in notebooks:

    # 获取笔记本名称和 ID

    notebook_name = notebook.Name

    notebook_id = notebook.ID

    

    # 构造 Notebook XML ID

    notebook_xml_id = "file://" + os.path.join(path, notebook_id + ".one")

    

    # 获取笔记本下所有节(section)

    sections = onenote.GetHierarchy(notebook_xml_id, win32com.client.constants.hsSections)

    

    # 遍历所有节

    for section in sections:

        # 获取节名称和 ID

        section_name = section.Name

        section_id = section.ID

        

        # 构造 Section XML ID

        section_xml_id = "file://" + os.path.join(path, notebook_id + "_", section_id + ".one")

        

        # 获取节下所有页(page)

        pages = onenote.GetHierarchy(section_xml_id, win32com.client.constants.hsPages)

        

        # 遍历所有页

        for page in pages:

            # 获取页名称和 ID

            page_name = page.Name

            page_id = page.ID

            

            # 构造 Page XML ID

            page_xml_id = "file://" + os.path.join(path, notebook_id + "_", section_id + "_", page_id + ".one")

            

            # 导出为 markdown 文件

            output_file = os.path.join(markdown_path, notebook_name, section_name, page_name + ".md")

            if not os.path.exists(os.path.dirname(output_file)):

                os.makedirs(os.path.dirname(output_file))

            onenote.Publish(page_xml_id, output_file, "Markdown")

在这个代码中,首先创建了一个 OneNote 应用程序对象,然后使用该对象获取了 OneNote 笔记本的层次结构,并遍历所有的笔记本、节和页。接着,使用 onenote.Publish 方法将 OneNote 页面导出为 markdown 文件,并保存到指定路径下。

科研工具、办公技巧、工具网站、数据收集,所有学生阶段需要的一切,应有尽有,甚至还有游戏喜加一。当然,也会有个人生活的文艺记录。感谢关注科研热点。

如果你喜欢这篇文章,多谢关注、点赞和评论,你的支持是我最大的动力。

点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8