宏辉液压 發表於 2026-1-26 12:00:00

如何用 Python 将 Markdown 转换为 Word 文档

<p class="p">在当今的技术文档工作流中,Markdown 因其简洁的语法和版本控制友好的特性,已成为开发者和技术写作者的首选格式。然而,在企业环境中,Word 文档仍然是正式报告、客户交付物和标准化文档的主流格式。</p>
<p class="p">本文将分享如何使用 Free Spire.Doc for Python—一款免费的 Python 文档处理库,快速实现 Markdown 到 Word 的转换,涵盖基础转换、批量处理等实用场景,新手也能轻松上手。</p>
<hr>
<p class="p">&nbsp;</p>
<h2 class="h4" data-heading="true">一、环境准备</h2>
<p class="p">Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且兼容常见的 Markdown 语法(标题、列表、图片、链接等)。</p>
<p class="listitem"><strong class="strong">安装</strong>:<br>打开终端/命令提示符,执行以下pip安装命令:</p>
<div class="cnblogs_code">
<pre>pip <span style="color: rgba(0, 0, 255, 1)">install</span> Spire.Doc.Free</pre>
</div>
<p>&nbsp;</p>
<hr>
<p>&nbsp;</p>
<h2 id="3" class="h4" data-heading="true">二、基础实现:单篇 Markdown 转 Word</h2>
<h3 id="4" class="h5" data-heading="true">场景1:将 Markdown 文本直接转换为 Word</h3>
<p class="p">适用于 Markdown 内容较短、无需读取文件的场景,核心代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> spire.doc <span style="color: rgba(0, 0, 255, 1)">import</span> *
<span style="color: rgba(0, 0, 255, 1)">from</span> spire.doc.common <span style="color: rgba(0, 0, 255, 1)">import</span> *

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 1. 定义要转换的Markdown文本(涵盖常见语法)</span>
markdown_text = <span style="color: rgba(128, 0, 0, 1)">"""</span><span style="color: rgba(128, 0, 0, 1)">
# 一级标题:Markdown转Word测试
## 二级标题:功能演示
### 三级标题:基础语法支持

#### 1. 段落与强调
这是一段普通段落,支持**粗体**、*斜体*、`行内代码`,以及[超链接](https://www.google.com/)。

#### 2. 列表
- 无序列表项1
- 无序列表项2
- 子列表项

1. 有序列表项1
2. 有序列表项2

#### 3. 代码块
```python
print("Hello, Markdown to Word!")
a = 1 + 2
```
</span><span style="color: rgba(128, 0, 0, 1)">"""</span>

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 1. 将markdown文本写入md文档</span>
markdown_path = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">input.md</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
with open(markdown_path, </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">w</span><span style="color: rgba(128, 0, 0, 1)">'</span>, encoding=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) as f:
    f.write(markdown_text)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 2. 创建Document对象</span>
doc =<span style="color: rgba(0, 0, 0, 1)"> Document()

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 3. 加载md文档</span>
<span style="color: rgba(0, 0, 0, 1)">doc.LoadFromFile(markdown_path, FileFormat.Markdown)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 4. 保存为Word文档(支持.doc和.docx格式)</span>
output_path = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Markdown转Word.docx</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
doc.SaveToFile(output_path, FileFormat.Docx)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 5. 释放资源</span>
<span style="color: rgba(0, 0, 0, 1)">doc.Close()

</span><span style="color: rgba(0, 0, 255, 1)">print</span>(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">转换完成!Word文档已保存至:{output_path}</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>&nbsp;</p>
<h3 id="5" class="h5" data-heading="true">场景2:读取 Markdown 文件转换为 Word</h3>
<p class="p">适用于已有.md文件的场景(如<code class="codespan">test.md</code>),代码更简洁:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">from</span> spire.doc <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> Document
</span><span style="color: rgba(0, 0, 255, 1)">from</span> spire.doc <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> FileFormat

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 1. 创建Document对象</span>
doc =<span style="color: rgba(0, 0, 0, 1)"> Document()

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 2. 直接加载Markdown文件(指定文件路径)</span>
markdown_file_path = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">test.md</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
doc.LoadFromFile(markdown_file_path, FileFormat.Markdown)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 3. 保存为Word文档</span>
output_path = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Markdown转Word.docx</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
doc.SaveToFile(output_path, FileFormat.Docx)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 4. 释放资源</span>
<span style="color: rgba(0, 0, 0, 1)">doc.Close()

</span><span style="color: rgba(0, 0, 255, 1)">print</span>(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">文件转换完成!路径:{output_path}</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>&nbsp;</p>
<h5 id="6" class="h5" data-heading="true">代码关键说明:</h5>
<ul class="ul">
<li class="listitem"><code class="codespan">Document()</code>:创建一个空的 Word 文档对象,是所有操作的核心载体;</li>
<li class="listitem"><code class="codespan">LoadFromFile()</code>:加载 Markdown 文件,第二个参数&nbsp;<code class="codespan">FileFormat.Markdown</code>&nbsp;指定解析格式;</li>
<li class="listitem"><code class="codespan">SaveToFile()</code>:接收输出路径和文件格式(<code class="codespan">FileFormat.Docx</code>/<code class="codespan">FileFormat.Doc</code>),完成保存;</li>
<li class="listitem"><code class="codespan">Close()</code>:释放文档资源,避免内存占用。</li>
</ul>
<hr>
<p>&nbsp;</p>
<h2 id="7" class="h4" data-heading="true">三、批量转换多个 Markdown 文件</h2>
<p class="p">Free Spire.Doc for Python 支持批量转换一个文件夹中的多个 Markdown 文档。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> os
</span><span style="color: rgba(0, 0, 255, 1)">from</span> spire.doc <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> Document
</span><span style="color: rgba(0, 0, 255, 1)">from</span> spire.doc <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> FileFormat

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 1. 定义Markdown文件所在文件夹和输出文件夹</span>
md_folder = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">./markdown_files</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
output_folder </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">./word_files</span><span style="color: rgba(128, 0, 0, 1)">"</span>

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 2. 创建输出文件夹(若不存在)</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span><span style="color: rgba(0, 0, 0, 1)"> os.path.exists(output_folder):
    os.makedirs(output_folder)

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 3. 遍历文件夹中的所有.md文件</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> filename <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> os.listdir(md_folder):
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> filename.endswith(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.md</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">):
      </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 拼接文件路径</span>
      md_path =<span style="color: rgba(0, 0, 0, 1)"> os.path.join(md_folder, filename)
      </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 生成输出Word文件名(替换后缀为.docx)</span>
      output_filename = os.path.splitext(filename) + <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">.docx</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
      output_path </span>=<span style="color: rgba(0, 0, 0, 1)"> os.path.join(output_folder, output_filename)

      </span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 4. 转换逻辑</span>
      doc =<span style="color: rgba(0, 0, 0, 1)"> Document()
      doc.LoadFromFile(md_path, FileFormat.Markdown)
      doc.SaveToFile(output_path, FileFormat.Docx)
      doc.Close()

      </span><span style="color: rgba(0, 0, 255, 1)">print</span>(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">已转换:{filename} -&gt; {output_filename}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)

</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">所有Markdown文件批量转换完成!</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>&nbsp;</p>
<hr>
<p>&nbsp;</p>
<h2 id="8" class="h4" data-heading="true">常见问题与注意事项</h2>
<ol class="ol">
<li class="listitem"><strong class="strong">格式兼容问题</strong>:部分小众 Markdown 语法(如 Mermaid 流程图、LaTeX 公式)暂不支持,转换后可能显示异常,建议提前简化这类内容;</li>
<li class="listitem"><strong class="strong">编码问题</strong>:若 Markdown 文件含中文,建议保存为 UTF-8 编码,避免转换后出现乱码;</li>
<li class="listitem"><strong class="strong">免费版限制</strong>:Free Spire.Doc for Python 免费版对文档页数有限制,满足日常轻量使用。</li>
</ol><hr>
<h4 id="9" class="h4" data-heading="true">&nbsp;</h4>
<p class="p">通过本文介绍的方法,我们可以通过几行 Python 代码实现 Markdown 转 Word 文档,同时支持批量处理等扩展功能,完美适配日常办公、文档交付等场景。相比其他转换工具,Free Spire.Doc 无需依赖第三方服务,本地运行更安全,且 Python 接口友好,新手易上手。</p><br><br>
来源:https://www.cnblogs.com/jazz-z/p/19532573
頁: [1]
查看完整版本: 如何用 Python 将 Markdown 转换为 Word 文档