fix: use try/finally in _extract_xlsx to prevent resource leak

This commit is contained in:
彭星杰 2026-04-21 16:16:27 +08:00 committed by Xubin Ren
parent a00beebd06
commit 46864b0911

View File

@ -133,7 +133,8 @@ def _extract_docx(path: Path) -> str:
def _extract_xlsx(path: Path) -> str:
"""Extract text from XLSX using openpyxl."""
try:
with load_workbook(path, read_only=True, data_only=True) as wb:
wb = load_workbook(path, read_only=True, data_only=True)
try:
sheets: list[str] = []
for sheet_name in wb.sheetnames:
ws = wb[sheet_name]
@ -145,6 +146,8 @@ def _extract_xlsx(path: Path) -> str:
if rows:
sheets.append(f"--- Sheet: {sheet_name} ---\n" + "\n".join(rows))
return _truncate("\n\n".join(sheets), _MAX_TEXT_LENGTH)
finally:
wb.close()
except Exception as e:
logger.error("Failed to extract XLSX {}: {}", path, e)
return f"[error: failed to extract XLSX: {e!s}]"