delete_worksheet
Remove a specific worksheet from an Excel workbook using the xlwings Excel MCP Server. Specify the workbook session and sheet name to delete unwanted worksheets.
Instructions
Delete worksheet from workbook.
Args:
session_id: Session ID from open_workbook (required)
sheet_name: Name of the worksheet to delete
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| sheet_name | Yes |
Implementation Reference
- src/xlwings_mcp/server.py:852-879 (handler)Main tool handler decorated with @mcp.tool(). Validates session, acquires lock, imports and calls the xlwings implementation delete_worksheet_xlw_with_wb, handles errors and returns result message.def delete_worksheet( session_id: str, sheet_name: str ) -> str: """ Delete worksheet from workbook. Args: session_id: Session ID from open_workbook (required) sheet_name: Name of the worksheet to delete """ try: # Validate session using centralized helper session = get_validated_session(session_id) if isinstance(session, str): # Error message returned return session with session.lock: from xlwings_mcp.xlwings_impl.sheet_xlw import delete_worksheet_xlw_with_wb result = delete_worksheet_xlw_with_wb(session.workbook, sheet_name) return result.get("message", "Worksheet deleted successfully") if "error" not in result else f"Error: {result['error']}" except (ValidationError, SheetError) as e: return f"Error: {str(e)}" except Exception as e: logger.error(f"Error deleting worksheet: {e}") raise
- Core xlwings implementation for deleting a worksheet using an existing workbook object (session-based). Checks if sheet exists and is not the only one, deletes it via wb.sheets[sheet_name].delete(), saves the workbook, returns success/error dict.def delete_worksheet_xlw_with_wb(wb, sheet_name: str) -> Dict[str, Any]: """Session-based version using existing workbook object. Args: wb: Workbook object from session sheet_name: 삭제할 시트명 Returns: 삭제 결과 딕셔너리 """ try: # 시트 존재 확인 existing_sheets = [sheet.name for sheet in wb.sheets] if sheet_name not in existing_sheets: return {"error": f"Sheet '{sheet_name}' not found"} # 시트가 1개만 있으면 삭제 불가 if len(wb.sheets) == 1: return {"error": "Cannot delete the only sheet in workbook"} # 시트 삭제 wb.sheets[sheet_name].delete() # 파일 저장 wb.save() return {"message": f"Sheet '{sheet_name}' deleted successfully"} except Exception as e: logger.error(f"xlwings 워크시트 삭제 실패: {e}") return {"error": f"Failed to delete worksheet: {str(e)}"}
- Filepath-based xlwings implementation for deleting worksheet. Opens workbook, performs same checks and deletion as session version, cleans up app and workbook resources.def delete_worksheet_xlw(filepath: str, sheet_name: str) -> Dict[str, Any]: """xlwings를 사용한 워크시트 삭제 Args: filepath: Excel 파일 경로 sheet_name: 삭제할 시트명 Returns: 삭제 결과 딕셔너리 """ app = None wb = None # Initialize COM for thread safety (Windows) _com_initialize() try: # 파일 경로 검증 file_path = Path(filepath) if not file_path.exists(): return {"error": f"File not found: {filepath}"} # Excel 앱 시작 app = xw.App(visible=False, add_book=False) # 워크북 열기 wb = app.books.open(filepath) # 시트 존재 확인 existing_sheets = [sheet.name for sheet in wb.sheets] if sheet_name not in existing_sheets: return {"error": f"Sheet '{sheet_name}' not found"} # 시트가 1개만 있으면 삭제 불가 if len(wb.sheets) == 1: return {"error": "Cannot delete the only sheet in workbook"} # 시트 삭제 wb.sheets[sheet_name].delete() # 파일 저장 wb.save() return {"message": f"Sheet '{sheet_name}' deleted successfully"} except Exception as e: logger.error(f"xlwings 워크시트 삭제 실패: {e}") return {"error": f"Failed to delete worksheet: {str(e)}"} finally: # 리소스 정리 if wb: try: wb.close() except Exception as e: logger.warning(f"워크북 닫기 실패: {e}") if app: try: app.quit() except Exception as e: logger.warning(f"Excel 앱 종료 실패: {e}")
- src/xlwings_mcp/server.py:852-879 (registration)The @mcp.tool() decorator registers this function as the MCP tool named "delete_worksheet" with input schema derived from function parameters.def delete_worksheet( session_id: str, sheet_name: str ) -> str: """ Delete worksheet from workbook. Args: session_id: Session ID from open_workbook (required) sheet_name: Name of the worksheet to delete """ try: # Validate session using centralized helper session = get_validated_session(session_id) if isinstance(session, str): # Error message returned return session with session.lock: from xlwings_mcp.xlwings_impl.sheet_xlw import delete_worksheet_xlw_with_wb result = delete_worksheet_xlw_with_wb(session.workbook, sheet_name) return result.get("message", "Worksheet deleted successfully") if "error" not in result else f"Error: {result['error']}" except (ValidationError, SheetError) as e: return f"Error: {str(e)}" except Exception as e: logger.error(f"Error deleting worksheet: {e}") raise