SriganthVaratharaj's picture
Upload 60 files
1c11bb1 verified
"""
backend/utils/export.py
Excel and JSON export utilities.
Source: Final_project-main/backend/utils.py (export functions extracted)
"""
from __future__ import annotations
import json
from datetime import datetime
from pathlib import Path
from typing import Any
from openpyxl import Workbook
def _safe_filename(value: str) -> str:
cleaned = "".join(c if c.isalnum() or c in {"-", "_"} else "_" for c in value.strip())
return cleaned or "document"
def export_to_excel(extracted_data: dict[str, Any], output_dir: Path, base_filename: str) -> Path:
"""Export extracted invoice fields to an Excel (.xlsx) file."""
output_dir.mkdir(parents=True, exist_ok=True)
safe_name = _safe_filename(base_filename)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
file_path = output_dir / f"{safe_name}_{timestamp}.xlsx"
workbook = Workbook()
worksheet = workbook.active
worksheet.title = "Extraction"
# Write all extracted fields as key/value columns
headers = list(extracted_data.keys())
values = [str(extracted_data.get(h, "")) for h in headers]
worksheet.append(headers)
worksheet.append(values)
workbook.save(file_path)
return file_path
def save_layout_json(data: dict[str, Any], output_dir: Path, base_filename: str) -> Path:
"""Save the full extraction payload as a formatted JSON file."""
output_dir.mkdir(parents=True, exist_ok=True)
safe_name = _safe_filename(base_filename)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
file_path = output_dir / f"{safe_name}_layout_data_{timestamp}.json"
file_path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
return file_path