72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
"""
|
|
Text formatters for spreadsheet data (LLM-friendly output).
|
|
"""
|
|
|
|
from .spreadsheet import SpreadsheetMetadata, SheetValues
|
|
|
|
|
|
def format_spreadsheet_metadata(metadata: SpreadsheetMetadata) -> str:
|
|
"""Format spreadsheet metadata as text."""
|
|
lines = [
|
|
f"Spreadsheet: {metadata.title}",
|
|
f"ID: {metadata.spreadsheet_id}",
|
|
f"Locale: {metadata.locale or 'N/A'}",
|
|
f"Timezone: {metadata.timezone or 'N/A'}",
|
|
"",
|
|
"Sheets:",
|
|
]
|
|
|
|
for sheet in metadata.sheets:
|
|
lines.append(
|
|
f" [{sheet.index}] {sheet.title} "
|
|
f"({sheet.row_count} rows x {sheet.column_count} cols)"
|
|
)
|
|
|
|
return "\n".join(lines)
|
|
|
|
|
|
def format_sheet_values(values: SheetValues, max_rows: int = 100) -> str:
|
|
"""
|
|
Format sheet values as text table.
|
|
|
|
Args:
|
|
values: Sheet values
|
|
max_rows: Maximum rows to display
|
|
"""
|
|
lines = [
|
|
f"Spreadsheet ID: {values.spreadsheet_id}",
|
|
f"Range: {values.range}",
|
|
f"Size: {values.row_count} rows x {values.column_count} cols",
|
|
"",
|
|
]
|
|
|
|
if not values.values:
|
|
lines.append("(empty)")
|
|
return "\n".join(lines)
|
|
|
|
# Display up to max_rows
|
|
display_rows = values.values[:max_rows]
|
|
|
|
# Calculate column widths (for basic alignment)
|
|
col_widths = [0] * values.column_count
|
|
for row in display_rows:
|
|
for i, cell in enumerate(row):
|
|
col_widths[i] = max(col_widths[i], len(str(cell)))
|
|
|
|
# Format rows
|
|
for row_idx, row in enumerate(display_rows):
|
|
cells = []
|
|
for col_idx, cell in enumerate(row):
|
|
width = col_widths[col_idx] if col_idx < len(col_widths) else 0
|
|
cells.append(str(cell).ljust(width))
|
|
# Pad with empty cells if row is shorter
|
|
while len(cells) < values.column_count:
|
|
width = col_widths[len(cells)] if len(cells) < len(col_widths) else 0
|
|
cells.append("".ljust(width))
|
|
lines.append(" | ".join(cells))
|
|
|
|
if values.row_count > max_rows:
|
|
lines.append(f"\n... ({values.row_count - max_rows} more rows)")
|
|
|
|
return "\n".join(lines)
|