delete_worksheet
Remove a specific worksheet from an Excel workbook using filepath and sheet name. Enables secure workbook management in corporate environments via xlwings Excel MCP Server integration.
Instructions
Delete worksheet from workbook.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filepath | Yes | ||
| sheet_name | Yes |
Implementation Reference
- src/xlwings_mcp/server.py:852-879 (handler)Primary handler and registration for the 'delete_worksheet' MCP tool. Validates the workbook session, acquires a lock for thread safety, imports and calls the core xlwings deletion implementation.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 implementation of worksheet deletion using xlwings with an existing workbook object. Includes safety checks for sheet existence and single-sheet protection, performs deletion via COM API, saves changes, and returns result dictionary.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)}"}
- Non-session variant of the worksheet deletion implementation. Opens the Excel app and workbook independently, performs the same safety checks and deletion, ensures proper cleanup of 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/sheet.py:27-32 (helper)Wrapper function in higher-level sheet module that calls the non-session delete_worksheet_xlw and raises custom SheetError on failure.def delete_sheet(filepath: str, sheet_name: str) -> Dict[str, Any]: """Delete a worksheet from the workbook.""" result = delete_worksheet_xlw(filepath, sheet_name) if "error" in result: raise SheetError(result["error"]) return result