all2md.utils.spreadsheet

Shared utilities for spreadsheet parsers (XLSX, ODS, CSV).

This module provides common functions used across spreadsheet format parsers to reduce code duplication and improve maintainability.

all2md.utils.spreadsheet.sanitize_cell_text(text: Any, preserve_newlines: bool = False) str

Convert any cell value to a safe string for AST Text node.

Note: Markdown escaping is handled by the renderer, not here. We only normalize whitespace and convert to string.

Parameters:
  • text (Any) – Cell value to sanitize

  • preserve_newlines (bool, default False) – If True, preserve newlines as <br> tags; if False, replace with spaces

Returns:

Sanitized cell text

Return type:

str

all2md.utils.spreadsheet.build_table_ast(header: list[str], rows: list[list[str]], alignments: list[Literal['left', 'center', 'right']]) Table

Build an AST Table from header, rows, and alignments.

Parameters:
  • header (list[str]) – Header row cells

  • rows (list[list[str]]) – Data rows

  • alignments (list[Alignment]) – Column alignments (‘left’, ‘center’, ‘right’)

Returns:

AST Table node

Return type:

Table

all2md.utils.spreadsheet.create_table_cell(text: str, alignment: Literal['left', 'center', 'right'] | None = None, colspan: int = 1, rowspan: int = 1) TableCell

Create a table cell with optional spans and alignment.

Parameters:
  • text (str) – Cell text content

  • alignment (Alignment or None, default None) – Cell alignment (‘left’, ‘center’, ‘right’)

  • colspan (int, default 1) – Number of columns this cell spans

  • rowspan (int, default 1) – Number of rows this cell spans

Returns:

AST TableCell node

Return type:

TableCell

all2md.utils.spreadsheet.transform_header_case(header: list[str], case_mode: str) list[str]

Transform header case based on case mode.

Parameters:
  • header (list[str]) – Header row

  • case_mode (str) – Case transformation mode: ‘preserve’, ‘title’, ‘upper’, or ‘lower’

Returns:

Transformed header

Return type:

list[str]

all2md.utils.spreadsheet.trim_rows(rows: list[list[str]], trim_mode: Literal['none', 'leading', 'trailing', 'both']) list[list[str]]

Trim empty rows based on trim mode.

Parameters:
  • rows (list[list[str]]) – Rows to trim

  • trim_mode ({'none', 'leading', 'trailing', 'both'}) – Trimming mode

Returns:

Trimmed rows

Return type:

list[list[str]]

all2md.utils.spreadsheet.trim_columns(rows: list[list[str]], trim_mode: Literal['none', 'leading', 'trailing', 'both']) list[list[str]]

Trim empty columns based on trim mode.

Parameters:
  • rows (list[list[str]]) – Rows to trim columns from

  • trim_mode ({'none', 'leading', 'trailing', 'both'}) – Trimming mode

Returns:

Rows with trimmed columns

Return type:

list[list[str]]