Skip to main content

DocConvert

Clean Markdown & structured data from Excel & Word — built for RAG pipelines and LLM workflows. Works 100% offline. No API keys. No data leaves your machine.

PyPI version License: MIT Python 3.10+ Build Stars

中文版: README_zh.md

Why DocConvert

Most document-to-Markdown tools convert the file — they don't clean it. Raw outputs are full of page numbers, duplicate headers, and whitespace noise that eats your context window and dilutes retrieval quality.

DocConvert was built for people who feed documents into LLMs and need every token to count.

Feature DocConvert MarkItDown Pandas + python-docx
Legacy .doc support ✅ ❌ ❌
Excel merged cells (rowspan/colspan) ✅ ⚠️ Manual
Configurable cleaning pipeline ✅ 4 rules, toggle any ❌ ❌
Batch + specific sheet selection ✅ ✅ ❌
Desktop GUI (no terminal needed) ✅ ❌ ❌
PDF / PPT / audio support ❌ ✅ ❌
MCP server / Claude integration ❌ ✅ ❌
100% offline, no cloud dependency ✅ ✅ ✅

Choose DocConvert if: you work with Excel/Word documents inside an organization, need legacy .doc support, or want a configurable cleaning pipeline before feeding docs into a RAG system.

Choose MarkItDown if: you need PDF, PPT, images, or audio conversion, or want MCP/Claude Desktop integration out of the box.

Use Cases

  • RAG ingestion — clean Excel financial reports and Word contracts into Markdown ready for embedding

  • LLM context prep — strip page numbers, duplicates, and noise before chunking

  • Offline compliance — convert sensitive documents without uploading to any cloud service

  • Batch automation — convert entire folders of reports into a structured directory

Installation

pip install docconvert-local

Optional extras:

# Legacy .doc support (Linux / macOS only)
pip install docconvert-local[doc]

# Full feature set including build tools
pip install docconvert-local[all]

Quick Start

GUI (interactive)

python main.py

CLI (batch / scripting)

# Single file → clean Markdown
python main.py convert input.xlsx --format md

# Batch convert with enhanced cleaning (recommended for RAG)
python main.py convert input.docx --format md --enhanced

# Multiple files → HTML into output/
python main.py convert file1.xlsx file2.docx --format html -o ./output

# Pick specific Excel sheets → JSON
python main.py convert input.xlsx --format json --sheet "Sheet1" --sheet "Sheet2"

Python API

from docconvert.controller import ConversionController
from docconvert.config import DEFAULT_CONFIG

controller = ConversionController(DEFAULT_CONFIG)
results = controller.convert_files(
    files=["input.xlsx", "report.docx"],
    output_fmt="md",
    output_dir="./out",
    enhanced_md=True,
)

for name, path, error in results:
    if error:
        print(f"Failed: {name} – {error}")
    else:
        print(f"OK: {name} → {path}")

For advanced usage, see the API Reference:

RAG Pipeline Integration

from docconvert.controller import ConversionController
from docconvert.config import DEFAULT_CONFIG
from langchain.text_splitter import RecursiveCharacterTextSplitter

controller = ConversionController(DEFAULT_CONFIG)
docs = []
for name, path, error in controller.convert_files(
    files=["contracts/*.docx"],
    output_fmt="md",
    output_dir="./out",
    enhanced_md=True,
):
    if not error:
        with open(path) as f:
            docs.append(f.read())

# Chunk and embed — noise already removed
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = splitter.split_text("\n".join(docs))

Output Preview

Input — an Excel sheet with merged cells:

Region Q1 Q2
North 120 150
South 90 200

→ Markdown output (auto-cleaned):

## Region    Q1    Q2
North       120   150
South        90   200

→ JSON output:

{
  "Region": ["North", "South"],
  "Q1": [120, 90],
  "Q2": [150, 200]
}

Smart Cleaning Pipeline

The --enhanced flag runs a configurable cleaning pass that removes common document noise before output. Each rule is independently toggleable:

from docconvert.config import AppConfig

config = AppConfig(
    cleaning_rules={
        "remove_page_numbers": True,    # strips 1, 2, 3… and "Page X of Y"
        "remove_duplicate_headers": True,  # deduplicates repeating section titles
        "remove_empty_lines": True,     # collapses excessive blank lines
        "normalize_spaces": True,       # single-spaces text, preserves tables
    }
)

All four rules are enabled by default with --enhanced. Set any to False to keep the raw output.

Features

  • Excel — Sheet selection, merged cells (rowspan/colspan), HTML / Markdown / JSON

  • Word — .docx via python-docx + mammoth, legacy .doc via textract

  • Smart Markdown — Removes page numbers, duplicate headers, collapses blank lines; all rules configurable

  • GUI — Tkinter desktop app with file list, preview, progress bar, overwrite protection

  • CLI — One-line batch conversion via argparse

  • Python API — Programmatic control with full type hints

  • Executable releases — Download a standalone .exe for Windows / macOS / Linux, no Python install needed

Releases (no Python needed)

Standalone executables for Windows, macOS, and Linux are built automatically on each tag push. Download them from Releases.

Project Layout

docconvert/
  converters/     # Excel / Word / .doc readers
  cleaners/       # Markdown cleaning pipeline
  exporters/      # HTML / Markdown / JSON output
  controller/     # Orchestration, async, overwrite checks
  gui/            # Tkinter desktop app
  parsers/, chunkers/  # Extension points
tests/
main.py           # GUI / CLI entry point

Contributing

See CONTRIBUTING.md.

License

MIT

Metadata

Release files for docconvert-local 2.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docconvert-local 2.0.5
File Size Uploaded
docconvert_local-2.0.5.tar.gz 72.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for docconvert-local 2.0.5
File Interpreter ABI Platform
docconvert_local-2.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 129.7 kB

Release files / docconvert_local-2.0.5.tar.gz

Download URL docconvert_local-2.0.5.tar.gz
Size 72.3 kB
Tags Source
SHA-256 checksum
How to use checksums
46fedd569bc24fb9ad682358c9ae36a7c5162a951fc8b62ab0086984549813a1
BLAKE2b-256 checksum
How to use checksums
effc7d4771561a484f2b874bb408bf561bfff5b4862bd27d377d8a6d72ef54f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / docconvert_local-2.0.5-py3-none-any.whl

Download URL docconvert_local-2.0.5-py3-none-any.whl
Size 57.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a419aa0b735d5b95a3af77160972aef29732ac95c1db8d7cdcad6bd6a9886d82
BLAKE2b-256 checksum
How to use checksums
686bfa8118f31e24c9a4994622fb450f8f36a0ece397a396e1b5dd1864cc5895
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

2.0.5 This release

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page