MarkItDown:PDF、Excel、PPT 一行命令转成 Markdown
你能得到什么:把 PDF、Word、Excel、PPT 一行命令转成 Markdown 文本,表格还是表格、标题还是标题;再交给 AI 读时,不用上传笨重的原文件,也更省 token,还能批量处理整个文件夹。适合:经常让 AI 读报告、合同、表格的人,以及搭知识库的人。不适合:需要「转完版式还和原文件一模一样」的人,它的目标是给 AI 读,不是给人排版。
项目速览
| 项目 | 内容 |
|---|---|
| 仓库 | microsoft/markitdown |
| Star | 191,377(截至 2026-10-21) |
| 许可证 | MIT |
| 最新版本 | v0.1.8(2026-09-21 发布) |
| 它做什么 | Python 命令行工具和库,支持 PDF、PowerPoint、Word、Excel、图片、音频、HTML、CSV/JSON/XML、ZIP、EPub 等格式转 Markdown |
安装指南
需要 Python 3.10 到 3.14,建议放在虚拟环境里。
python3 -m venv .venv && source .venv/bin/activate
pip install 'markitdown[all]'
markitdown --versionpy -m venv .venv
.venv\Scripts\activate
pip install "markitdown[all]"
markitdown --versionuv venv --python=3.12 .venv && source .venv/bin/activate
uv pip install 'markitdown[pdf,docx,pptx,xlsx]' # 只装常用格式使用教程:把一堆文件变成 AI 能直接读的文本
- 转单个文件:
markitdown 报告.pdf -o 报告.md,或者直接输出到屏幕markitdown 账单.xlsx。 - 批量转整个文件夹:用下面的循环,把当前目录的 PDF、Excel、PPT 都转成同名
.md。 - 交给 AI:把
.md内容贴给 AI,或者放进你的知识库目录。表格类文件效果最好,转出来就是标准的 Markdown 表格。
# macOS / Linux:批量转换
for f in *.pdf *.xlsx *.pptx *.docx; do
[ -e "$f" ] && markitdown "$f" -o "${f%.*}.md"
done在 Python 里调用也只要三行:
from markitdown import MarkItDown
md = MarkItDown()
print(md.convert("账单.xlsx").text_content)避坑与解决方案
报 MissingDependencyException
只执行 pip install markitdown 时,PDF、Word 这些格式的依赖并没有装。我们实测转 PDF 时报 PdfConverter threw MissingDependencyException,提示需要 [pdf] 或 [all]。解决:pip install 'markitdown[all]',或按需装 'markitdown[pdf,docx,pptx,xlsx]'。注意 zsh 里方括号要加引号。
PDF 转出来英文单词粘在一起
我们拿一篇英文论文 PDF 测试,正文转出来变成了 Thedominantsequenc... 这样,单词之间的空格全丢了。这是 PDF 本身文字排布的问题,不同 PDF 表现不同。解决:拿到结果先抽查几段;对排版复杂的 PDF,可以先用 Stirling-PDF 或其他工具做 OCR、修复,再转换;或者对这类文件直接让多模态 AI 读原 PDF。
老的 .doc 文件转不了
只支持 .docx,对老的 .doc 格式的支持请求还挂在 issue #23。解决:先用 LibreOffice 转一下:soffice --headless --convert-to docx 文件.doc,再交给 MarkItDown。
图片里的文字没转出来
单独的图片默认只取 EXIF 等元数据;在 Python 里给 MarkItDown 配上 llm_client 和 llm_model,才会让视觉模型描述图片内容。PDF、Word、PPT、Excel 里嵌入的图片文字,要再装官方的 markitdown-ocr 插件,同样走你配置的视觉模型(需要一个 OpenAI 兼容的接口)。
自己的脚本别叫 markitdown.py
如果你的脚本文件名也叫 markitdown.py,from markitdown import MarkItDown 会导入你自己的文件,报「partially initialized module」的循环导入错误(见 issue #8)。改个文件名就好。
只处理你信任的文件
官方 README 特别提醒:它以当前用户的权限读写文件、访问网络,处理来路不明的输入时要小心,尽量调用范围最小的转换函数。
WANGXXXL 实测于 2026-10-21
- 环境:Linux 云电脑,Python 3.12(uv 虚拟环境),markitdown 0.1.8。
- Excel:自建一张三行的订阅清单表,
markitdown subs.xlsx0.57 秒输出一个带工作表名的标准 Markdown 表格,中文和数字都正确。 - PDF:一篇 15 页、约 2.2 MB 的英文论文,用时约 1.9 秒,得到约 40 KB 的 Markdown;结构基本保留,但英文单词间的空格丢失,就是上面写的坑。
- 缺依赖:另建一个只装
markitdown的环境转同一份 PDF,报MissingDependencyException。