all2md.utils.chart_helpers
Chart to table conversion helpers for parsers.
This module provides reusable helper functions for converting chart data (from XLSX, PPTX, ODS, etc.) into Table AST nodes with consistent structure.
Functions
build_chart_table: Convert chart series data to AST Table
- all2md.utils.chart_helpers.build_chart_table(categories: list[str], series_data: list[tuple[str, list[Any]]], category_header: str = 'Category', alignments: list[str] | None = None) Table | None
Convert chart series data to AST Table node.
This helper provides a unified way to convert chart data from different formats (XLSX, PPTX, ODS) into a consistent table structure with: - Header row: Category column + one column per series - Data rows: One row per category value
- Parameters:
categories (list[str]) – List of category labels for the X-axis (e.g., months, product names)
series_data (list[tuple[str, list[Any]]]) – List of (series_name, values) tuples where each series has values corresponding to the categories
category_header (str, default "Category") – Header text for the category column
alignments (list[str] | None, default None) – Optional list of alignment strings for columns. If None, defaults to “left” for category column and “center” for value columns.
- Returns:
AST Table node with chart data, or None if series_data is empty
- Return type:
Table or None
Examples
Convert simple chart data:
>>> categories = ["Jan", "Feb", "Mar"] >>> series_data = [ ... ("Sales", [100, 150, 120]), ... ("Costs", [80, 90, 85]) ... ] >>> table = build_chart_table(categories, series_data)
With custom header:
>>> table = build_chart_table( ... categories=["Q1", "Q2", "Q3", "Q4"], ... series_data=[("Revenue", [1000, 1200, 1100, 1300])], ... category_header="Quarter" ... )
Notes
This function handles cases where: - Series have different lengths (pads with empty strings) - No categories provided (generates “Row 1”, “Row 2”, etc.) - Category count doesn’t match series value count (uses max length)
The resulting table structure is:
` | Category | Series1 | Series2 | ... | |----------|---------|---------|-----| | Cat1 | Val1 | Val1 | ... | | Cat2 | Val2 | Val2 | ... | `