microsoft / microsoft/markitdown

PPTX chart conversion drops parent category labels

Open Beginner friendly
#2,502 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
186k
Forks
13.7k
Avg merge
1d 4h
Merged PRs (30d)
49

Description

PowerPoint charts with hierarchical category axes lose every parent label during conversion. A chart grouped by year and quarter becomes a table with repeated Q1 rows, making it impossible to tell which year's values each row describes.

Reproducer on main (eb31b5c), with markitdown[pptx] installed:

import io
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
from markitdown import MarkItDown

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])
data = CategoryChartData()
for year in ("2024", "2025"):
    data.add_category(year).add_sub_category("Q1")
data.add_series("Sales", (10, 20))
slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED,
    Inches(1), Inches(1), Inches(8), Inches(5), data,
)
stream = io.BytesIO()
prs.save(stream)
stream.seek(0)
print(MarkItDown().convert_stream(stream, file_extension=".pptx").markdown)

Actual table:

| Category | Sales |
|---|---|
| Q1 | 10.0 |
| Q1 | 20.0 |

Expected: retain both 2024 / Q1 and 2025 / Q1 (or otherwise include the parent labels), with each row's values unchanged.

PptxConverter iterates the leaf categories. python-pptx exposes the complete parent-to-child paths through Categories.flattened_labels. This also reproduces with three category levels. I have a focused fix and in-memory PPTX regression tests ready.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in the PptxConverter code where leaf categories are iterated, then inspect python-pptx's Categories.flattened_labels and the existing in-memory PPTX tests. Reproduce the two-level and three-level cases from the issue, preserve the parent-to-child labels in the Markdown table, and verify that each row's values remain unchanged.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
88/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.